我有一个WCF服务和应用程序。我的应用程序偶尔会向WCF服务发送一些文本消息(string []),然后解析它。
现在我希望我的应用程序将类MyObject
的对象发送到WCF服务。然后服务也应该有机会解析(我的意思是它应该有机会反序列化其数据(例如myObjectInstance.name
等)。)
如何实现?
提前感谢您的帮助。
答案 0 :(得分:2)
将您的代码划分为(至少)三个程序集:
MyObject
和IMyService
(这是您服务的合同); 可能引用无法在客户端部署的任何程序集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);
}