尝试在具有相同代码库的两个系统之间发送复杂类型。它们都知道作为数据传输介质的相同对象。但是,当我在使用者代理上传递对象时,它在Web服务命名空间中显示为对象,而不是应用程序中的对象。
无论如何我可以定义使用内部对象吗?
[WebMethod]
public void Run(TransportObject transport)
出现在MyNamespace.Webservice.Transport
而不是MyNamespace.Objects
答案 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
是您的服务合同,MyRequestType
和MyResponseType
是您的数据合同,您可以通过引用服务也引用的程序集来使用它(定义这些类型)。