我合作:
类库:Model.dll
using System;
using System.Collections.Generic;
using System.Text;
namespace root
{
public class Customer
{
private int _Id;
public int Id
{
get { return _Id; }
set { _Id = value; }
}
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
}
}
参考Model.dll的ASP.NET Web服务,所以我可以在web方法中使用:
[WebMethod]
public string HelloWorld(root.Customer customer) {
return "Hello World";
}
参考Model.dll和Web Service(1)的Windows应用程序。
root.Customer newCustomer = new Customer();
newCustomer.Id = 1;
newCustomer.Name = "Name";
ws.Service ws = new root.ws.Service();
ws.HelloWorld(newCustomer);
^ problem here
错误:参数'1':无法从'root.Customer'转换为'root.ws.Customer'
(1)右键单击 - >和Web参考 - >此解决方案中的Web服务 - >单击Service.asmx - > 输入网络参考名称: ws - >单击添加引用
更新:我可以从
更改生成的Reference.cs文件中的行public string HelloWorld(Customer customer)
到
public string HelloWorld(root.Customer customer)
因此,函数将寻找真实模型而不是代理对象,但不是真正的答案 在每次网络参考更新后,我都不会考虑编辑此文件 如何强制使用真实模型?
答案 0 :(得分:1)
我担心在自动生成的ASMX代理中重用类型是不可能的。
有三种选择。
1)编写自己的代码生成器,其行为类似于wsdl.exe
,即构建Web服务的代理但重用指定的类型
(相当困难)
2)编写自己的代码重写器,重写自动生成的代理以使用您自己的类型。每次构建对Web服务的引用后,您都会调用此类重写器
(仍然乏味)
3)切换到WCF Web服务。 basicHttpBinding上的WCF服务在语义上等同于ASMX Web服务(使用基于http + soap的相同通信协议),但WCF服务元数据包含有关类型的更多信息,以便代理生成器能够重用类型来自参考组件"。
(建议的方法)
答案 1 :(得分:0)
如果您从asmx切换并开始使用WCF的svc模型,您可以在服务器和客户端之间共享库,而不用大惊小怪。如果这是一个选项,那么有足够的资源可以帮助您在线使用WCF。