【问题标题】:Define Outgoing/Calling Port for SOAP Web Service in Visual Studio 2010在 Visual Studio 2010 中定义 SOAP Web 服务的传出/调用端口
【发布时间】:2012-10-24 18:25:24
【问题描述】:

我目前正在处理的应用程序需要使用 SOAP 与 Web 服务交互。服务提供商希望通过防火墙使用 IP 地址和端口来限制对服务的访问。我正在使用 VS 2010,该服务已添加为 .NET 2.0 Web 服务。

现在我的连接端口的防火墙规则设置为“ANY”,服务团队希望将其收紧到特定端口。我似乎找不到任何方法在我的服务中设置特定的传出端口(退出我的网络服务器时使用的端口)。

甚至有可能做到这一点吗?

【问题讨论】:

  • 应用程序是在 .NET 4 中构建的。服务引用被添加为 Web 服务引用(支持 .NET 2.0),而不仅仅是服务引用。
  • 我实际上并不知道如何使用服务参考来做到这一点,但它可能比我在下面的答案更容易。您使用网络参考是有原因的吗?
  • 我正在使用 Web 参考,因为这就是在项目早期添加参考的方式。我尝试将其更改为服务引用,但这似乎完全改变了自动生成的对象。鉴于我们在开发生命周期中所处的位置,它现在必须作为 Web 参考。

标签: web-services soap asmx ports


【解决方案1】:

可以做到这一点,但这是一个重要的定制。

  1. 有关一般技术,请参阅Ways to Customize your ASMX Client Proxy。在底部附近,您会找到“重型定制”。
  2. 通过覆盖GetWebRequest 方法,您可以访问请求所使用的HttpWebRequest 实例。
  3. HttpWebRequest 有一个 ServicePoint 属性。
  4. ServicePoint 有一个 BindIPEndPointDelegate 属性。
  5. 将此属性设置为指向将决定使用哪个 IP 地址和端口的方法。

【讨论】:

  • 感谢您的回复。我尝试了您的建议:protected override WebRequest GetWebRequest(Uri uri) { HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(uri); request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(DefineIpPort); return request; } private IPEndPoint DefineIpPort(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) { return new IPEndPoint(IPAddress.Any, 1234); } 但是,我使用netstat -ano 测试了结果,它没有使用端口 1234。似乎应用程序仍在选择任意端口。
  • 我应该能够在扩展类代码中设置断点吗?每次我尝试时,我都会收到“断点当前不会被击中......”消息。想知道我是不是搞砸了……
  • 是的,您应该可以设置断点。请注意您创建分部类的命名空间。它必须与原始类具有相同的名称和命名空间。
  • 必须取消选中断点的“Debugging=>Enable Just My Code”选项。命名空间是相同的,通过从类定义中删除 partial 关键字并收到“存在此类型的另一个部分声明”错误来确认。仍然无法让应用程序使用端口 1234 进行传出通信。 :- /
猜你喜欢
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 2011-03-31
相关资源
最近更新 更多