gpt4 book ai didi

c# - 反向代理背后的 WebService

转载 作者:行者123 更新时间:2023-12-03 14:35:11 30 4
gpt4 key购买 nike

我有一个 Web 服务,它位于这样的反向代理后面:
reverse proxy
现在发生的情况是,当我尝试添加 Web 引用来测试 Web 服务时,它说无法下载 wsdl 文件。那是因为当请求被发送时它是 https://uat.mywebservice.com/Service/Service.asmx但是当它访问反向代理然后厌倦下载 wsdl 和迪斯科文件时,它会将链接更改为 http://myservice.comp.com/Service/Service.asmx?wsdl这不是正确的链接 myservice.comp.com只是反向代理上的 namespace 。
发生的事情是soap文件中的头文件被更新到这个命名空间而不是实际的主机名uat.mywebservice.com ,我能够看到这个使用 fiddler 迪斯科文件的地址不正确。我通过使用 wsdl.exe 工具创建一个代理类,然后将该类中的所有错误链接更新为正确的主机名。
有什么方法可以确保在点击反向代理时地址保持正确。
不正确: mywebservice.comp.com

<?xml version="1.0" encoding="utf-8" ?> 
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
<contractRef ref="http://mvwebservice.comp.com/Service/Service.asmx?wsdl" docRef="http://mvwebservice.comp.com/Service/Service.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
<soap address="http://mywebservice.comp.com/Service/Service.asmx" xmlns:q1="http://tempuri.org/" binding="q1:ServiceSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
<soap address="http://mywebservice.comp.com/Service/Service.asmx" xmlns:q2="http://tempuri.org/" binding="q2:ServiceSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
</discovery>
正确: uat.mywebservice.com
<?xml version="1.0" encoding="utf-8" ?> 
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
<contractRef ref="https://uat.mvwebservice.com/Service/Service.asmx?wsdl" docRef="https://uat.mvwebservice.com/Service/Service.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
<soap address="https://uat.mywebservice.com/Service/Service.asmx" xmlns:q1="http://tempuri.org/" binding="q1:ServiceSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
<soap address="https://uat.mywebservice.com/Service/Service.asmx" xmlns:q2="http://tempuri.org/" binding="q2:ServiceSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
</discovery>

最佳答案

我为解决类似问题所做的是强制网络服务发出正确的 header 。
您可以执行以下操作:

  • App_Code 中创建以下类文件夹:
    using System;
    using System.Web.Services.Description;

    namespace Msdn.Web.Services.Samples
    {
    /// <summary> Summary description for WSDLReflector </summary>
    public class WSDLReflector : SoapExtensionReflector
    {
    public override void ReflectMethod()
    {
    //no-op
    }

    public override void ReflectDescription()
    {
    ServiceDescription description = ReflectionContext.ServiceDescription;
    foreach (Service service in description.Services)
    {
    foreach (Port port in service.Ports)
    {
    foreach (ServiceDescriptionFormatExtension extension in port.Extensions)
    {
    SoapAddressBinding binding = extension as SoapAddressBinding;
    if (null != binding)
    {
    binding.Location = binding.Location.Replace("http://mywebservice.comp.com", "https://uat.mywebservice.com");
    }
    }
    }
    }
    }
    }
    }
  • 并将其添加到 web.config :
    <webServices>
    <diagnostics suppressReturningExceptions="true" />
    <soapExtensionReflectorTypes>
    <add type="Msdn.Web.Services.Samples.WSDLReflector,App_Code"/>
    </soapExtensionReflectorTypes>
    </webServices>
  • 关于c# - 反向代理背后的 WebService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10213911/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com