我有一个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类中引用的类。
答案 0 :(得分:1)
在代理类生成器(也称为Web服务引用向导)中,如果可能,有一个复选框可以重用现有类型。引用您的dll并在启用此复选框的情况下更新Web服务引用。
答案 1 :(得分:0)
您可以将Util dll的引用添加到具有代理类的Project中。然后,您可以更改方法签名以从Util dll接受对象。如果Util dll中的类名和图类似于Web服务所期望的类,那么它应该不是问题。