Wcf对象类型

时间:2012-03-19 11:02:37

标签: c# wcf

尝试在具有相同代码库的两个系统之间发送复杂类型。它们都知道作为数据传输介质的相同对象。但是,当我在使用者代理上传递对象时,它在Web服务命名空间中显示为对象,而不是应用程序中的对象。

无论如何我可以定义使用内部对象吗?

[WebMethod]
public void Run(TransportObject transport)

出现在MyNamespace.Webservice.Transport而不是MyNamespace.Objects

下的应用程序中

2 个答案:

答案 0 :(得分:1)

[WebMethod]表示它是基于ASMX的服务,而不是WCF服务......

使用[OperationContract]

中的[ServiceContract]再试一次

在WCF中共享类型是可能的,我认为它甚至是默认行为。

答案 1 :(得分:1)

正如Henk所说,在WCF中共享类型是默认行为。

我将通过扩展并展示如何实现它来证明这一点:

因此,不是让visual studio为您生成服务引用,而是可以让WCF在使用ChannelFactory执行时创建代理。

例如:

// Create service proxy on the fly
var factory = new ChannelFactory<IMyServiceContract>("NameOfMyClientEndpointInConfigFile");
var proxy = factory.CreateChannel();

// Create data contract
var requestDataContract = new MyRequestType();

// Call service operation.
MyResponseType responseDataContract = proxy.MyServiceOperation(requestDataContract);

在上面的示例中,IMyServiceContract是您的服务合同,MyRequestTypeMyResponseType是您的数据合同,您可以通过引用服务也引用的程序集来使用它(定义这些类型)。