ソースの表示以前のリビジョンバックリンク全て展開する/折り畳む文書の先頭へ Share via Share via... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer Reddit Teams最近の変更Send via e-Mail印刷パーマリンク × « P4で「Client 'foo' can only be used from host 'bar'」と言われた時の対処方法 既存と異なる構成のvdevをプールに追加しても特に問題はないらしい » C#のCreateDocumentTypeがタイムアウトする時の簡易対策 C#のXmlDocumentでHTMLを生成しようと、W3CのDTDを指定してXmlDocument.CreateDocumentType()するとタイムアウトやHTTPステータスコード500で例外を吐くことがある。こちとらvalidなHTMLを生成しようと真面目に指定してんのに、この仕打である(´・ω・`)。みんなW3Cを見に行って慢性的な高負荷状態になってるのが原因らしいが、まぁ当然そうなりますわな…。 コードにすると↓な感じ。 XmlDocument doc = new XmlDocument(); XmlDocumentType docType = doc.CreateDocumentType( "HTML", "-//W3C//DTD HTML 4.01 Frameset//EN", "https://www.w3.org/TR/html401/frameset.dtd", null); /* ここでエラー */ XmlResolverでローカルキャッシュしたDTDをマッピングするのが正攻法らしいのだが、ぶっちゃけ面倒。というか、調べても良くわからんかったのでパスw(分かったら追記する…多分) とりあえずエラーを回避するだけなら、CreateDocumentType実行前にXmlDocument.ResolverをnullにしてやればOKっぽい。コードにするまでもないが一応書いておく。 XmlDocument doc = new XmlDocument(); doc.Resolver = null; // 追加 XmlDocumentType docType = doc.CreateDocumentType( "HTML", "-//W3C//DTD HTML 4.01 Frameset//EN", "https://www.w3.org/TR/html401/frameset.dtd", null); /* エラーにならない */ ・・・と、ここまで書いて思ったが、これで回避できるって事は自前実装したXMLリゾルバでDTD返してやればいいだけなんじゃね? 2016-04-13追記 といわけでローカルのDTDを使うリゾルバを作った。 Comments Name E-Mail Website 人間の証明として、ボックス内の全ての文字を入力してください。 この項目は空のままにして下さい:Preview Comment blog/2016/2016-02-24.txt 最終更新: 2016-04-13 17:30by Decomo