.net webservice代理类组织/正则表达式匹配c#类定义

时间:2011-02-09 11:38:54

标签: .net regex web-services proxy wsdl

我正在使用一个.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 定义。

如果我删除代理类中的类定义,一切正常。

我将手动编辑生成的代理类以删除这些重复的类定义,以使其再次起作用。

由于这个文件非常庞大,因此并不容易。这些类的顺序也随着每一代而变化。

我试图通过以下方式解决这个问题,但他们都没有真正完成这项工作(或者我无法让他们去做)

  1. 以某种方式阻止wsdl将这些类定义生成到代理中。例如,通过使用某些属性修饰方法。但是找不到办法做到这一点。
  2. 使用PowerShell自动编辑生成的代理类。我正在考虑匹配 所有使用regurlar表达式定义类的行,然后从文件中删除它们。
  3. 获取wsdl以生成代码元素 以可预测的顺序让我的 编辑变得容易
  4. 如果有人能帮我摆脱这个问题,我真的很感激。

    目前我偏向于第二种选择。因此,如果有人可以帮助我使用正则表达式来匹配包含新行的c#部分类定义,那将非常有用。 (在powershell正则表达式中,如果没有太多要求的话)

2 个答案:

答案 0 :(得分:0)

通过在Visual Studio中使用Web服务,您可以将其配置为重用所有引用的程序集,这将指示它跳过在客户端中创建这些类。您需要做的就是为您的客户项目添加新的服务引用。

观看此视频:http://www.youtube.com/watch?v=12PGpwy8SUY

答案 1 :(得分:0)

如果使用“添加服务引用”,则可以将其配置为重用外部程序集中的类型。您无法使用“添加Web引用”执行此操作。