我正在使用一个.net webservice,里面有几百个方法。 (我无法控制网络服务,所以我无法重构它。)
但是我正在使用它的客户端,并且每当WS发生变化时我都会生成客户端代理类。 (它经常变化)。
我使用wsdl.exe生成此代理类。
wsdl.exe http://url.asmx /o:Proxy.cs /n:My.Name.Space
这个生成的代理类包含返回类型的类,WS中使用的输入类型。
我有一个名为 My.Application.DTO.dll 的DTO程序集 它包含一个名为 MyDTOClass 的类。 此程序集由WebService项目和通过代理类调用Web服务的Windows应用程序项目引用。
想象一下,我的网络服务有这样的方法
[WebMethod]
public MyDTOClass GetSomeDTOMethod(int id) { ... }
现在,当我为此生成代理时,代理将包含 MyDTOClass 的定义。当然,在不同的命名空间内。
然后我按如下方式使用代理类:
My.Application.DTO.MyDTOClass dto;
dto = WSProxy.GetSomeDTOMethod(x);
无法将无法将WebService.Namespage.MyDTOClass转换为My.Application.DTO.MyDTOClass ,因为Proxy类有自己的 MyDTOClass 定义。
如果我删除代理类中的类定义,一切正常。
我将手动编辑生成的代理类以删除这些重复的类定义,以使其再次起作用。
由于这个文件非常庞大,因此并不容易。这些类的顺序也随着每一代而变化。
我试图通过以下方式解决这个问题,但他们都没有真正完成这项工作(或者我无法让他们去做)
如果有人能帮我摆脱这个问题,我真的很感激。
目前我偏向于第二种选择。因此,如果有人可以帮助我使用正则表达式来匹配包含新行的c#部分类定义,那将非常有用。 (在powershell正则表达式中,如果没有太多要求的话)
答案 0 :(得分:0)
通过在Visual Studio中使用Web服务,您可以将其配置为重用所有引用的程序集,这将指示它跳过在客户端中创建这些类。您需要做的就是为您的客户项目添加新的服务引用。
答案 1 :(得分:0)
如果使用“添加服务引用”,则可以将其配置为重用外部程序集中的类型。您无法使用“添加Web引用”执行此操作。