0

我有几个使用 Visual Studio 2010 用 c# 编写的 Web 服务。我还有一个 Apigee 帐户,并通过包括 API 密钥作为参数的 Apigee URL 访问 Web 服务。

访问 Web 服务的 WSDL(通过 Apigee),我使用类似于以下的 URL:

https://myapi-prod.apigee.net/v1/myapi/Path/To/MyWebService.asmx?wsdl&apikey= {myapikey}

WSDL 成功返回,但在绑定信息(如下)下,显示了 Web 服务的直接路径。最初,我没有选择这个,但是当添加防火墙规则以阻止直接访问我们的服务器(示例中为 api.mydomain.com)时,我当然阻止了人们使用 WSDL 的任何请求。

我的问题是如何更改 WSDL 中的地址位置?拥有像 Apigee 这样的服务只是保护 WSDL 没有什么意义。

  <wsdl:service name="MyWebService">
    <wsdl:port name="MyWebServiceSoap" binding="tns:MyWebServiceSoap">
      <soap:address location="https://api.mydomain.com/Path/To/MyWebService.asmx" />
    </wsdl:port>
    <wsdl:port name="MyWebServiceSoap12" binding="tns:MyWebServiceSoap12">
      <soap12:address location="https://api.mydomain.com/Path/To/MyWebService.asmx" />
    </wsdl:port>
    <wsdl:port name="MyWebServiceHttpGet" binding="tns:MyWebServiceHttpGet">
      <http:address location="https://api.mydomain.com/Path/To/MyWebService.asmx" />
    </wsdl:port>
    <wsdl:port name="MyWebServiceHttpPost" binding="tns:MyWebServiceHttpPost">
      <http:address location="https://api.mydomain.com/Path/To/MyWebService.asmx" />
    </wsdl:port>
  </wsdl:service>
4

1 回答 1

2

在 Apigee 中,您可以使用属于现有流程一部分的策略来替换服务器返回的 wsdl 文件中的值。

例如,在响应路径中使用 javascript 策略,您可以简单地执行字符串搜索/替换来替换您想要更改的值。如果您想在没有 js 的情况下执行此操作,则可以使用 ExtractVariables 和 AssignMessage 策略完全重写 wsdl。

js 策略的示例代码:

wsdl = context.getVariable("message.content");
wsdl = wsdl.replace("api.mydomain.com", "new-server.com", "g");

context.setVariable("message.content", wsdl);

只需微调上面的搜索/替换,它就可以在您的情况下工作。

一些参考资料:

于 2014-01-21T16:21:16.790 回答