WCFのよくある問題と解決策
4539 ワード
1.WCFサービス側でHttpContextを使用する.Currentが空のソリューション:
1)サービス・エンド・WCFのクラスに説明を加える[AspNetCompatbilityRequirements(RequirementsMode=AspNetCompatbilityRequirementsMode.Allowed)]
2)サービス側WEBCONFIGのノードにを追加
2.WCFサービス側でHttpContextを使用する.Current.Server.MapPathの代替ソリューション:
System.Web.Hosting.HostingEnvironment.MapPath("~/Upload"+ fileFolder);
3.大ファイルbyte[]転送の問題を解決する:
サービス側、Web.configファイルでは、Bindingsセクションは空ですが、ServiceではbindingConfigurationプロパティが指定されていません.デフォルトの65535のサイズが使用されます.
問題が見つかったら、解決は簡単です.
Bindingsセクションに新しいBinding設定(system.serviceModelノード)を追加し、最大許容データを指定します.
その後、対応するサービスにbindingConfigurationプロパティを指定します.
これにより、クライアントから十分なデータを送信できます.
P.S.:
.Netのデフォルトでは4 Mのファイルしか転送できないので、Wcfの両端の配置を設定しているにもかかわらず、超えられない.Netの限定なので、大きなファイルを転送するにはSystemが必要です.Webセクションに追加
ここの単位はKBです.これで100 Mのファイルを転送できます.もちろん、このような大きなファイルは、セグメント化したほうがいいです.
4.次のエラー解決策が発生しました.
①操作のためにメッセージを処理できない場合が多い」http://tempuri.org/」が正しくないか、メッセージに無効または期限切れのセキュリティコンテキストトークンが含まれているか、バインド間で不一致が発生しているためです.
解決策:クライアントとサービス側のbindingノード内で以下のノードを変更するだけです:
②タイムアウト問題
解決方法:クライアントの
1)サービス・エンド・WCFのクラスに説明を加える[AspNetCompatbilityRequirements(RequirementsMode=AspNetCompatbilityRequirementsMode.Allowed)]
2)サービス側WEBCONFIGの
2.WCFサービス側でHttpContextを使用する.Current.Server.MapPathの代替ソリューション:
System.Web.Hosting.HostingEnvironment.MapPath("~/Upload"+ fileFolder);
3.大ファイルbyte[]転送の問題を解決する:
サービス側、Web.configファイルでは、Bindingsセクションは空ですが、ServiceではbindingConfigurationプロパティが指定されていません.デフォルトの65535のサイズが使用されます.
問題が見つかったら、解決は簡単です.
Bindingsセクションに新しいBinding設定(system.serviceModelノード)を追加し、最大許容データを指定します.
<bindings>
<basicHttpBinding>
<binding name="LargeData" maxReceivedMessageSize="2147483647" messageEncoding="Text"
transferMode="Streamed" sendTimeout="00:10:00" />
</basicHttpBinding>
</bindings>
その後、対応するサービスにbindingConfigurationプロパティを指定します.
<service behaviorConfiguration="Server.Service.WcfServiceBehavior" name="Server.Service.WcfService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeData"
contract="Server.Service.WcfService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
これにより、クライアントから十分なデータを送信できます.
P.S.:
.Netのデフォルトでは4 Mのファイルしか転送できないので、Wcfの両端の配置を設定しているにもかかわらず、超えられない.Netの限定なので、大きなファイルを転送するにはSystemが必要です.Webセクションに追加
<httpRuntimemaxRequestLength="102400" />
ここの単位はKBです.これで100 Mのファイルを転送できます.もちろん、このような大きなファイルは、セグメント化したほうがいいです.
4.次のエラー解決策が発生しました.
①操作のためにメッセージを処理できない場合が多い」http://tempuri.org/」が正しくないか、メッセージに無効または期限切れのセキュリティコンテキストトークンが含まれているか、バインド間で不一致が発生しているためです.
解決策:クライアントとサービス側のbindingノード内で以下のノードを変更するだけです:
②タイムアウト問題
解決方法:クライアントの