0

我已将 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();
    }

任何建议将不胜感激!

4

3 回答 3

0

我最近遇到了类似的问题,帮助我的链接很少,重点是尝试使用 SVCUTIL 之类的工具,而不是 VS:

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

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

于 2010-04-12T13:38:21.190 回答
0

在单独的 Web 服务中尝试 相同的类型,特别是那里的第一个答案。

我不清楚您在做什么,但似乎这就是您所需要的。

于 2010-04-12T16:23:21.800 回答
0

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

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

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

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

于 2010-04-14T10:27:46.473 回答