从Web服务公开DLL的类型

时间:2013-12-13 12:44:52

标签: c# web-services proxy proxy-classes

我有一个Web服务,它使用我们拥有的DLL中的特定类型。例如,我们在Visual Studio中的Web服务解决方案如下所示:

Solution
  ACMEWebService (proj)
  Utils (proj)

然后我的WebMethod中有ACMEWebService,我希望Util类中存在某种类型。它看起来像这样:

[WebMethod]
public void SomeWebMethod (int Id, CustomDateClass date)
{
    // my code here
}

所以CustomDateClass是一个位于Utils项目中的类。那个Utils项目只是构建一个DLL文件。


我的客户端应用程序引用Web服务。它的作用是生成一个所谓的 代理 类,看起来像这样:

[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.1432")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://acme/Services")]
public partial class CustomDateClass {
    private short yearField;
    private byte monthField;

    public short Year {
        get {
            return this.yearField;
        }
        set {
            this.yearField = value;
        }
    }

    public byte Month {
        get {
            return this.monthField;
        }
        set {
            this.monthField = value;
        }
    }
}

[System.Web.Services.Protocols.SoapHeaderAttribute("CustomSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://acme/Services/SomeMethod" ...)]
public void SomeMethod(int id, CustomDateClass date) {
    object[] results = this.Invoke("SomeMethod", new object[] {
                id,
                date});
}

代理 类中,我还会看到CustomDateClass类和网络方法SomeWebMethod(int Id, CustomDateClass date)

问题是,来自代理类的这个方法不期望来自CustomDateClass DLL的Utils对象,而是来自代理类命名空间......

有没有办法强制Web服务从Utils DLL公开类型?

然后我也可以简单地从我的CLient App中引用Utils.dll,并将一个来自Utils DLL的实例的对象传递回Web Service,而不是像现在一样在Proxy类中引用的类。

2 个答案:

答案 0 :(得分:1)

在代理类生成器(也称为Web服务引用向导)中,如果可能,有一个复选框可以重用现有类型。引用您的dll并在启用此复选框的情况下更新Web服务引用。

答案 1 :(得分:0)

您可以将Util dll的引用添加到具有代理类的Project中。然后,您可以更改方法签名以从Util dll接受对象。如果Util dll中的类名和图类似于Web服务所期望的类,那么它应该不是问题。