2

この問題を解決するためにたくさんの記事を読みましたが、解決できません。

シナリオ WCFサービスと2つのホストヘッダーを持つWebサイトがあります

  1. spin-localhost
  2. spin-localhost.worldwide.co.uk(spin-localhost2に変更)

しかし、同じポート44001を使用すると、spin-localhostサービスにはアクセスできますが、spin-localhost.worldwide.co.uk(現在はspin-localhost2)にはアクセスできません。

コーディング

 <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Bbc.Ww.SalesProjections.UI.Services.CilsDataReceiveBehavior">
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="WindowsAuth" maxReceivedMessageSize="2097152">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="Bbc.Ww.SalesProjections.UI.Services.CilsDataReceiveBehavior" name="Bbc.Ww.SalesProjections.UI.Services.CilsDataReceive">
        <endpoint address="http://spin-localhost:44001/Services/CilsDataReceive.svc" binding="basicHttpBinding" name="BasicHttpEndpoint" bindingConfiguration="WindowsAuth" contract="Bbc.Ww.SalesProjections.UI.Services.ICilsDataReceive" />
        <endpoint address="http://spin-localhost.worldwide.co.uk:44001/Services/CilsDataReceive.svc" binding="basicHttpBinding" name="BasicHttpEndpoint" bindingConfiguration="WindowsAuth" contract="Bbc.Ww.SalesProjections.UI.Services.ICilsDataReceive" />
      </service>
    </services>
    <serviceHostingEnvironment>
      <baseAddressPrefixFilters>
        <add prefix="http://spin-localhost:44001" />
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>

  </system.serviceModel>

上記の解決策は失敗しました私は工場で試しました

public class CustomHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        return new ServiceHost(serviceType, baseAddresses[0]);
    }
}

編集:私は4ではなく/Net3.5を使用しています。

参照 http://www.sieena.com/blog/archive/2011/02/01/wcf-service-in-iis-with-multiple-host-headers.aspx

http://blogs.msdn.com/b/rampo/archive/2008/02/11/how-can-wcf-support-multiple-iis-binding-specificed-per-site.aspx

http://blogs.msdn.com/b/rampo/archive/2007/06/15/supporting-multiple-iis-bindings-per-site.aspx

http://social.msdn.microsoft.com/forums/en-US/wcf/thread/9e248455-1c4d-4c5c-851c-79d9c1631e21/

などなど....

更新1:さらにテストした後、worldwide.bbc.co.ukにエラーがあるようです。そのため、名前とバインディングをspin-localhost2に変更しました。

<endpoint address="http://spin-localhost2:44001/Services/CilsDataReceive.svc" binding="basicHttpBinding" name="BasicHttpEndpoint" bindingConfiguration="WindowsAuth" contract="Bbc.Ww.SalesProjections.UI.Services.ICilsDataReceive" />

spin-localhostを使用して最初のサービスにアクセスできますが、spin-localhost2は401、401、次に400(見つかりません)を提供します。Fiddlerで確認しました。

解決策(まだテストしていません):

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Bbc.Ww.SalesProjections.UI.Services.CilsDataReceiveBehavior">
          <!--          <serviceMetadata httpGetEnabled="true" />-->
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Windows"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="WindowsAuth" maxReceivedMessageSize="2097152">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="Bbc.Ww.SalesProjections.UI.Services.CilsDataReceiveBehavior" name="Bbc.Ww.SalesProjections.UI.Services.CilsDataReceive">
        <endpoint address="" binding="basicHttpBinding" name="BasicHttpEndpoint" bindingConfiguration="WindowsAuth" contract="Bbc.Ww.SalesProjections.UI.Services.ICilsDataReceive"/>
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
4

2 に答える 2

1

バージョン4で.NETを使用するWCFは、複数のホストヘッダーIISホスティングをサポートしていません。これには回避策があり、.NETのバージョンによっては多少複雑になります。

.NET 4.0のWCFは、構成でを使用して有効にするオプトイン機能としてこれをサポートし<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />ます。

ここではすべてが完全に説明されています:http://blogs.msdn.com/b/rampo/archive/2008/02/11/how-can-wcf-support-multiple-iis-binding-specificed-per-site.aspx

于 2012-08-22T16:15:07.757 に答える
0

このブログ投稿に示されているように、IISを使用するWCFは、相対アドレスが異なる複数のエンドポイントをサポートしますが、IISが同じポートおよび同じWebサイト/アプリケーションで異なるホストヘッダーをサポートするとは思いません。ホストヘッダーごとに1つずつ、個別のIIS Webサイトを作成し、サービスごとに個別のserviceModel構成を使用してみてください。そうすれば、作成するサービスに同じポートを使用できます。

于 2012-08-22T15:50:15.180 に答える