1

wcf アプリケーションを作成しました。私は何も変えませんでした。Service1.GetData(int) を使用しました。それは正常に動作します。ブラウザなどで wsdl を実行できます。次に、新しいサービス ホストを返すだけでサービスが起動しないカスタム サービス ホスト ファクトリを作成しました。ブラウザで wsdl にアクセスできなくなりました。カスタム ServiceHost を追加しようとしたので、少しデバッグを行うことができましたが、エンドポイントが見つからないようです (AddDefaultEndpoints( を明示的に呼び出す場合でも)。これは、エンドポイントを web.config に明示的に追加した場合でも当てはまります。

問題が何であるかについて誰か考えがありますか?

誰かが気になる場合は、コードを github に置きます: https://github.com/devlife/Sandbox/tree/master/WcfService1

4

2 に答える 2

0

私が取り組んでいるプロジェクトで CustomHost を定義した方法は次のとおりです。

<%@ ServiceHost Language="C#" Debug="true" Service="Servicename.Servicename" CodeBehind="Service1.svc.cs" Factory="WcfService1.CustomServiceHostFactory"%>

この、

public class CustomServiceHostFactory : ServiceHostFactory
{
    public CustomServiceHostFactory()
    {

    }

    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        return new CustomServiceHost(serviceType, baseAddresses);
    }
}

public class CustomServiceHost : ServiceHost
{
    public CustomServiceHost()
    {
    }

    public CustomServiceHost(Type serviceType, params Uri[] baseAddresses)
        : base(serviceType, baseAddresses)
    {
    }

    protected override void OnOpening()
    {
        base.OnOpening();
    }

    protected override void OnClosing()
    {
        base.OnClosing();
    }

    protected override void ApplyConfiguration()
    {
        base.ApplyConfiguration();
    }
}

CustomServiceHost がむき出しのように見えることに注意してください。これは、私のソリューションでは、この CustomServiceHost に多くのログと構成があり、削除して適切ではないためです。

私が見ることができる他の違いは、CustomServiceHost がエンドポイントを追加しないことです。エンドポイントは、次のように構成ファイルで定義されます。

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="Servicename.Servicename" behaviorConfiguration="ServiceBehavior">
    <endpoint address="http://*******.svc" binding="wsHttpBinding" contract="Namespace.IContract" bindingConfiguration="BindingConfig">
    </endpoint>
  </service>
</services>
<bindings>
  <wsHttpBinding>
    <binding name="BindingConfig" maxReceivedMessageSize="9291456">
      <security mode="None">
      </security>
      <readerQuotas maxArrayLength="6291456" />
    </binding>
  </wsHttpBinding>
</bindings>

于 2011-12-19T20:46:04.930 に答える
0

なぜ ServiceHostFactory を使用しているのですか? AppFabric/IIS を使用しますか? またはセルフホステッドサービス?

MEX エンドポイントを追加する必要があると思います。

    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
于 2011-12-19T20:52:42.283 に答える