WCF学習心得-クライアントがサービス側のカスタムクラスデータを取得
2521 ワード
プロジェクトの需要のため、WCFサービスが必要で、アヒルを追い払ってけんかしましょう.次は直接本題に入ります!
まずWCFアプリケーションを作成して、具体的にどのように作成するかは言うまでもなく、ネット上の大きな編で、私は主に自分が直面した問題について話します.
問題1:タイムアウト問題、最後にデータを取得したときに突然サービスがタイムアウトし、サービスが切断されたことを示す
解決:プロファイルの追加:
もちろん、WSHttpBindingオブジェクトのいくつかのプロパティをコードで変更することもできます.
問題2:上記の問題を解決した後にまた新しい問題が現れて、サービス側でデータを取得することができて、しかしクライアントに着いていつも空で、それからテストデータを準備して、サービス側で1つのint型の変数だけをあげて、クライアントは取得して、しかしいったん自分の自己定義のクラスに変えて、クライアントは取得できません
解決:サービス側とクライアントにカスタムクラス、コードは同じで、また2つのクラスのネーミングスペースが一致することを保証します.
サービス
クライアントと同じ:
OK~~結果は予想通り!!
それから検収する时また1つの问题が现れました:クライアントはやはりサービス端のデータを得ることができなくて、本当にどこの问题なのか分かりません.プログラムも动いたことがありません.通信が失敗し、、、、???
まずWCFアプリケーションを作成して、具体的にどのように作成するかは言うまでもなく、ネット上の大きな編で、私は主に自分が直面した問題について話します.
問題1:タイムアウト問題、最後にデータを取得したときに突然サービスがタイムアウトし、サービスが切断されたことを示す
解決:プロファイルの追加:
<bindings>
<wsHttpBinding>
<binding name="BindConfig" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
もちろん、WSHttpBindingオブジェクトのいくつかのプロパティをコードで変更することもできます.
問題2:上記の問題を解決した後にまた新しい問題が現れて、サービス側でデータを取得することができて、しかしクライアントに着いていつも空で、それからテストデータを準備して、サービス側で1つのint型の変数だけをあげて、クライアントは取得して、しかしいったん自分の自己定義のクラスに変えて、クライアントは取得できません
解決:サービス側とクライアントにカスタムクラス、コードは同じで、また2つのクラスのネーミングスペースが一致することを保証します.
サービス
[DataContract(Namespace = "Rostering.BO")]
[Serializable]
public class NewAttendancePlan
{
[DataMember]
public int AttendancePlan_Id { get; set; }
}
クライアントと同じ:
[DataContract(Namespace = "Rostering.BO")]
[Serializable]
public class NewAttendancePlan
{
[DataMember]
public int AttendancePlan_Id { get; set; }
}
OK~~結果は予想通り!!
それから検収する时また1つの问题が现れました:クライアントはやはりサービス端のデータを得ることができなくて、本当にどこの问题なのか分かりません.プログラムも动いたことがありません.通信が失敗し、、、、???