12

次のコードが必要です。

BasicHttpBinding binding = new BasicHttpBinding ();

Uri baseAddress = new Uri ("URL.svc");

EndpointAddress endpointAddress = new EndpointAddress (baseAddress);

var myChannelFactory = new ChannelFactory<IMyInterface> (binding, endpointAddress);

IMyInterface client = null;

try
{
    client = myChannelFactory.CreateChannel ();
    var a = client.WsFunction ("XXXXXX");                    
    ((ICommunicationObject)client).Close ();
}
catch
{
    if (client != null)
    {
        ((ICommunicationObject)client).Abort ();
    }
}

ここで、「IMyInterface」は、私の WS が実装するインターフェイスです。たとえば、次のようになります。

[ServiceContract]
public interface IMyInterface
{
    [OperationContract]
    Result WsFunction1 (string param);

    [OperationContract]
    Result WsFunction2 (string param);

    [OperationContract]
    Result WsFunction3 (string param);
}

そして、それは次のようなものを返します:

[DataContract]
public class Result
{
    string a = "";
    string b = "";

    [DataMember]
    public string A
    {
        get { return a; }
        set { a = value; }
    }

    [DataMember]
    public string B
    {
        get { return b; }
        set { b = value; }
    }
}

このコードを実行すると、WS にアクセスできますが、Result を入力することはできません。

私は何を間違っていますか?

前もって感謝します!

4

3 に答える 3

9

を介してサービスにアクセスする最も簡単な方法BasicHttpBindingは、SilSvcUtil.exe (Silverlight ユーティリティ アプリケーション) からクライアント コードを生成することです。

SLsvcUtil.exe /directory:C:\users\me\Desktop http://URL.svc

これにより、生成されるファイル内に MyInterfaceClient クラスが作成されます。

次に、コードで次のことができます。

var binding = new BasicHttpBinding() {
    Name = "BindingName",
    MaxBufferSize = 2147483647,
    MaxReceivedMessageSize = 2147483647
};

var endpoint = new EndpointAddress("URL.svc");

MyInterfaceClient client = new MyInterfaceClient(binding, endpoint);

client.WSFunctionCompleted += (object sender, WSFunctionCompletedEventArgs e) => {
    //access e.Result here
};

client.WSFunctionAsync("XXXXXX");

あなたのマイレージは異なる場合があります。これがうまくいくかどうか教えてください。

于 2013-11-04T19:07:17.640 に答える