2

私はすべてを試したと思いますが、単純な net.tcp WCF サービスを動作させることができず、少し助けが必要です。Visual Studio 2015 に次のサービス クラスを持つ WCF net.tcp プロジェクトがあります。

namespace AppRefactory.JdmCommSample
{
    public enum DocType { Labels, Releases, Artists }

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface ILabelOperations
    {

        [OperationContract]
        bool PassLabelProcess(string targetAddress, string hostCommand, MusicLabelContract musicLabel);

        // TODO: Add your service operations here
    }
}

以下は、ファイル LabelProcess.svc にサービスを実装します。

namespace AppRefactory.JdmCommSample
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "MusicLabel" in code, svc and config file together.
    // NOTE: In order to launch WCF Test Client for testing this service, please select MusicLabel.svc or MusicLabel.svc.cs at the Solution Explorer and start debugging.
    public class LabelOperations : ILabelOperations
    {
        public bool PassLabelProcess(string targetAddress, string hostCommand, MusicLabelContract musicLabel)
        {
            throw new NotImplementedException();
        }
    }
}

サービスの web.config をよく読んで ServiceModelReg.exe を使用しましたが、サービス プロジェクトの web.config の最新版は次のとおりです。

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2"/>
    <httpRuntime targetFramework="4.5.2"/>
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
    </httpModules>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="epTcpBehavior">
          <endpointDiscovery />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehaviorConfig">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"
            includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https"/>
        <add binding="netTcpBinding" scheme="net.tcp" bindingConfiguration="InsecureTcp" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
    <services>
      <service behaviorConfiguration="ServiceBehaviorConfig" name="AppRefactory.JdmCommSample.LabelOperations">
        <endpoint address="LabelService" binding="netTcpBinding" bindingConfiguration="InsecureTcp"
          name="LabelOperations" contract="AppRefactory.JdmCommSample.ILabelOperations" />
        <endpoint address="netTcpMex" binding="mexTcpBinding" bindingConfiguration="NewBinding0"
          name="NetTcpMEX" contract="IMetadataExchange" />
        <endpoint address="mexhttp" binding="mexHttpBinding" name="HttpMex"
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost/JdmCommSample/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="InsecureTcp" portSharingEnabled="true">
          <security mode="None" />
        </binding>
      </netTcpBinding>
      <mexTcpBinding>
        <binding name="NewBinding0" />
      </mexTcpBinding>
    </bindings>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="ApplicationInsightsWebTracking"/>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"
        preCondition="managedHandler"/>
    </modules>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
    <validation validateIntegratedModeConfiguration="false"/>
  </system.webServer>

</configuration>

クライアント プロジェクトに移動して (Visual Studio 2015 で) サービス参照を追加しようとすると、次のエラーが発生します。

ここに画像の説明を入力

[検出] ボタンをクリックしてもサービスが表示されないため、サービス アドレス net://localhost/JdmCommSample/LabelOperations.svc を手動で入力し、[実行] ボタンをクリックして次の結果を取得します。

ここに画像の説明を入力

最後に、上記のエラー メッセージ ブロック (ダイアログ内) の [詳細] リンクをクリックすると、次のようになります。

サービス参照エラー ダイアログの追加:

URI プレフィックスが認識されません。メタデータに解決できない参照が含まれています: 'net.tcp://localhost/JdmCommSample/LabelOperations.svc'。メッセージを受け入れることができる net.tcp://localhost/JdmCommSample/LabelOperations.svc でリッスンしているエンドポイントはありませんでした。これは、多くの場合、アドレスまたは SOAP アクションが正しくないことが原因です。詳細については、InnerException (存在する場合) を参照してください。サービスが現在のソリューションで定義されている場合は、ソリューションを構築して、サービス参照を再度追加してみてください。

この同じエラー メッセージをかなり前から受け取っていますが、クライアントのメタデータがサービスに古い http:// アドレスを使用し続ける理由と、net.tcp アドレスを受け入れない理由がわかりません。 

最後に、開発環境として以下を使用していることを簡単に追加する必要があります。

  • ビジュアル スタジオ 2015
  • ウィンドウズ10
  • IIS10

...そして、net.tcp をサポートするデフォルト サービス (http の有無にかかわらず) を使用して IIS 設定を修正し、サポートするために /bin フォルダーとコーディング フォルダーに仮想アプリケーションを作成することで、この問題を解決するために時間をかけました。インタラクティブなデバッグ。上記の最後のダイアログで説明されているエラー メッセージが変わりますが、使用している net.tcp:// アドレスが「使用不可」であるというだけです。

繰り返しますが、あなたの助けは大歓迎です!!!

4

1 に答える 1