0

私のソリューションでは、メッセージコントラクトクラスをパラメーターとして受け取るWCFサービスを作成しています。

[ServiceContract]
public interface IServiceClass
{
    [OperationContract]
    Employee AddEmployee(Employee employee);

}

 public class ServiceClass : IServiceClass
 {
    public Employee AddEmployee(Employee employee)
    {
       //do something
    }
 }

[MessageContract]
public class Employee
{
    [MessageHeader]
    public string EmployeeNumber { get; set; }

    [MessageBodyMember]
    public string FirstName { get; set; }
    [MessageBodyMember]
    public string LastName { get; set; }
    [MessageBodyMember]
    public DateTime DOB { get; set; }
}

次に、[サービス参照の追加]オプションを使用して、このサービスをクライアントアプリケーションに追加します。サービスが正常に追加されました。次に、クライアントプログラムでこの方法を使用しました。ただし、メソッドのシグネチャは変更されています。次のように変更しました。

 public void AddEmployee(ref string EmployeeNumber, 
    ref System.DateTime DOB, ref string FirstName, ref string LastName)

私は次のようにクライアントでサービスを使用しています。

TcpServiceReference.ServiceClassClient service =
            new TcpServiceReference.ServiceClassClient();

注:TcpServiceReferenceはサービス名です

理由がわかりません。

4

2 に答える 2

3

WCFがこれを行うことがある理由は正確にはわかりませんが、サービスインターフェイスを使用すると、「正しい」メソッドシグネチャを取得できます。

TcpServiceReference.IServiceClass service = 
    new TcpServiceReference.ServiceClassClient();

(これは、svcutil(サービス参照の追加)が生成したサービス・インターフェースのクライアント側のIServiceClass名前であると想定しています。)

于 2012-11-13T10:12:53.563 に答える
0

問題を解決しましたか?

voidを返す(そして4つのパラメーターを受け取る)AddEmployeeメソッドがない限り、プロキシは正常に生成されないように見えますか?

サービス参照を再生成(削除および作成)することをお勧めします。

乾杯-ジョッケ

于 2012-11-13T10:02:01.583 に答える