WCF:与非.NET Web服务共享库

时间:2010-04-12 12:21:46

标签: .net wcf shared-libraries esb

我已将Sonic ESB流程作为Web服务公开,并编写了一个.NET应用程序,通过调用其方法将数据上传到它。

为此,我在.NET端有一个复杂对象库,我以xml格式添加到Sonic ESB端的Web服务定义。这是公开Sonic ESB进程的必要步骤,因为要调用的方法应该能够识别从.NET应用程序传递的对象。

但是,当我尝试将服务引用添加到.NET应用程序时,同一个库在服务的每一侧被视为两个不同的库,因为它们被分配到不同的名称空间。确保在创建服务引用时检查“在引用的程序集中重用类型”没有区别:彼此对应的不同类型保持分开。

以下代码因此产生错误:

    public string PushManifest(FargoGate.DtoLib.OutboundFargoMessage message)
    {
        FargoGateOnRampWSRequest wsRequest = new FargoGateOnRampWSRequest();

        OutboundFargoMessage outMessage = new OutboundFargoMessage();

        //TODO ERROR: Cannot convert source type 'FargoGate.DtoLib.OutboundMessage' to target type 'PollFargoJob.FargoGateOnrampWS.OutboundFargoMessage'
        wsRequest.OutboundFargoMessage = message;

        throw new NotImplementedException();
    }

任何建议都将不胜感激!

3 个答案:

答案 0 :(得分:0)

我最近遇到了类似的问题,很少有链接帮我解决,重点是尝试使用像SVCUTIL这样的工具,而不是VS:

http://kjellsj.blogspot.com/2008/06/wcf-using-shared-types.html

http://msdn.microsoft.com/en-us/library/aa702581.aspx

答案 1 :(得分:0)

尝试Identical Types In Separate Web Services,特别是那里的第一个答案。

我没有清楚地知道你在做什么,但似乎这就是你需要的。

答案 2 :(得分:0)

在我看来,我根本不需要svcutil.exe,如建议的那样,而是使用xsd.exe继续为数据模型生成模式。我这样做是为了确保数据模型在服务的两端完全相同。但是,出于某种原因,我无法正确创建Web服务,因为每当我尝试使用更新的模式时,Sonic Workbench都会继续崩溃。对于Workbench来说,架构可能太复杂了吗?

好吧,我现在用一个肮脏的把戏来解决它。而不是使用WCF我使用标准的.NET 2.0注册Web服务的方式。在Sonic ESB Web服务中,我将输入参数类型设置为字符串,而不是库中的数据类型。在调用webservice操作的.NET代码中,我将对象序列化为xml并将生成的字符串传递给webservice。

因此,我传递的是一个包含序列化对象的xml的字符串,而不是传递一个序列化对象。这似乎有效!

这是一个糟糕的解决方案,我知道,但我很绝望。