6

次のようなリバース プロキシの背後にある Web サービスがあります。

リバース プロキシ

Web サービスをテストするために Web 参照を追加しようとすると、wsdl ファイルをダウンロードできないと表示されます。これは、リクエストが送信されたときはhttps://uat.mywebservice.com/Service/Service.asmxですが、リバース プロキシにヒットし、wsdl ファイルと disco ファイルのダウンロードに疲れると、リンクがhttp に変更されるためです。 //myservice.comp.com/Service/Service.asmx?wsdlmyservice.comp.comであり、リバース プロキシの単なる名前空間であるため、これは適切なリンクではありません。

何が起こっているのかというと、soap ファイルのヘッダーが、実際のホスト名ではなく、この名前空間に更新されていますuat.mywebservice.com。fiddler disco ファイルを使用すると、アドレスが正しくないことがわかりました。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>
4

1 に答える 1

4

同様の問題を解決するために私がしたことは、Web サービスに正しいヘッダーを発行させることでした。

次のことができます。

  1. 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");
                }
              }
            }
          }
        }
      }
    }
    
  2. そしてこれをに追加しweb.configます:

    <webServices>
      <diagnostics suppressReturningExceptions="true" />
      <soapExtensionReflectorTypes>
        <add type="Msdn.Web.Services.Samples.WSDLReflector,App_Code"/>
      </soapExtensionReflectorTypes>
    </webServices>
    
于 2013-02-11T22:17:37.990 に答える