如何将任何对象发送到WCF服务

时间:2013-12-27 13:38:37

标签: c# wcf web-services

我有一个WCF服务和应用程序。我的应用程序偶尔会向WCF服务发送一些文本消息(string []),然后解析它。

现在我希望我的应用程序将类MyObject的对象发送到WCF服务。然后服务也应该有机会解析(我的意思是它应该有机会反序列化其数据(例如myObjectInstance.name等)。)

如何实现?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

将您的代码划分为(至少)三个程序集:

  • '元数据' - 包含MyObjectIMyService(这是您服务的合同); 可能引用无法在客户端部署的任何程序集
  • 'Server' - 实现IMyService并公开WCF服务; 引用“元数据”
  • '客户' - 包含客户的代码; 参考'元数据'

通过这种方式,您可以轻松共享服务器和客户端之间的“元数据”程序集。然后,只需使用MyObject作为IMyService中任何方法的任何参数类型即可。

答案 1 :(得分:0)

是的,你可以,但你应该使用Message。请查看以下example

因此,您的代码可能看起来像

private static void Main()
{
    var createRequest = new CreateClientRequest
        {
            Email = "emial@emial.com"
        };
    var response = SoapServiceClient.Post<CreateClientRequest, ClientResponse>(createRequest);
    Console.WriteLine("POST: {0}", response);

    var updateRequest = new UpdateClientRequest
        {
            Email = "new@email.com",
            Id = response.Id
        };
   response = SoapServiceClient.Put<UpdateClientRequest, ClientResponse>(updateRequest);
   Console.WriteLine("PUT: {0}", response);

    var getClient = new GetClientRequest
        {
            Id = response.Id
        };
   response = SoapServiceClient.Get<GetClientRequest, ClientResponse>(getClient);
    Console.WriteLine("GET: {0}", response);

    var deleteRequest = new DeleteClientRequest
        {
            Id = response.Id
        };
    SoapServiceClient.Delete(deleteRequest);

    Console.ReadKey();
}

使用简单的ServiceContract

[ServiceContract]
public interface ISoapService
{
    [OperationContract(Action = ServiceMetadata.Operations.Process,
        ReplyAction = ServiceMetadata.Operations.ProcessResonse)]
    Message Process(Message message);

    [OperationContract(Action = ServiceMetadata.Operations.ProcessWithoutResonse)]
    void ProcessWithoutResonse(Message message);
}