在没有XSD的情况下共享WSDL类型

Ily*_*kov 9 c# wcf xsd wsdl web-services

我似乎无法找到从具有共享类型的WSDL生成代理但没有任何XSD与它们一起生成代理的示例.任何人都可以将此标记为重复,请指出一个例子吗?

这里有2个服务,每个服务都有自己的命名空间和通用类型.唯一可公开访问的是它们的WSDL,没有类型的XSD或它的.dll传递给wsdl.exe /sharedtypessvcutils没有它我最终得到相同的class Foo我无法传递给SetFooclass Foo1.

我能想到的最好的方法是以编程方式生成代理并通过CodeDOM检测重复,忽略DataContract/ WebServiceBinding命名空间,但这是一个巨大的混乱......

[WebService(Namespace = "http://tempuri.org/FOO1")]
public class Service1 : WebService
{
    [WebMethod]
    public Foo GetFoo()
    {
        return new Foo();
    }
}

[WebService(Namespace = "http://tempuri.org/FOO2")]
public class Service2 : WebService
{
    [WebMethod]
    public void SetFoo(Foo foo)
    {
    }
}

public class Foo
{
    public int Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

tom*_*ern 1

有一种方法可以做到这一点,此处概述。

在您的情况下,您可以跳过第一步,从服务 1 生成代理,然后在生成服务 2 代理时使用 svcutil 上的 /r 标志来引用服务 1 代理程序集。

这将确保您的服务 2 代理将使用与服务 1 代理相同的 Foo 实例。

但是,您是否考虑过仅托管具有两个操作的单个服务?这会节省你很多工作。

编辑:另请参阅这篇文章: http://blogs.msdn.com/b/youssefm/archive/2009/10/09/reusing-types-in-referenced-assemblies-with-svcutil-sr-switch。 ASPX