6

パラメータにドイツ語のウムラウトが含まれているEndpointAddressクラスのインスタンスを作成しようとしています。

EndpointAddress endpointAddress = new EndpointAddress("net.tcp://süd:8001/EmployeeService");

指定されたURIを解析できないという例外を常にスローします。ウムラウトをエンコードされた値に置き換えようとしましたが、同じ例外が発生します。

無効なURI:ホスト名を解析できませんでした。

誰かが以前に同じ問題を抱えていましたか?前もって感謝します。

4

4 に答える 4

4

パーサーは、おそらく国際化ドメイン名(IDN)の操作方法を知りません。このようなホスト名が必要な場合は、Punycodeエンコーディングを自分で行う必要があります。使用したことはありませんが、適切に見えるコア関数IdnMapping.GetAsciiがあります。

EndpointAddress endpointAddress = new EndpointAddress(
    "net.tcp://" + IdnMapping.GetAscii("süd") + ":8001/EmployeeService"
);

おそらく機能します(機能しない場合はご容赦ください。C#は私の言語ではありません)。

于 2013-02-20T14:34:41.980 に答える
2

補足として。WCFは、.Net 4.5でIDN(ホスティングサービスとIDN名のサービスと通信するWCFクライアントの両方)のサポートを追加しました。このドキュメントには、これに関する情報が含まれています。

したがって、この例外は、.net4.5に対してアプリをコンパイルするとすぐに消えます。

于 2013-02-20T18:41:32.767 に答える
1

提案されているように、この種のURIを使用する前に、IRIおよびIDN解析を有効にする必要があります。

これをapp.configに追加します。

 <configuration>
     <uri>
         <idn enabled="All" />
         <iriParsing enabled="true" />
     </uri>
 </configuration>
于 2013-02-20T14:50:24.663 に答える
-2

使用してみてください

string uri = System.Uri.EscapeDataString("net.tcp://süd:8001/EmployeeService");

詳細については、こちらをご覧ください。

于 2013-02-20T14:30:46.517 に答える