34

デュプレックス モード チャネルを設定しようとしているときに、ファイル転送サービスを basicHttpBinding から netTcpBinding に移動しました。net.tcp ポート共有サービスも開始しました。

私は現在開発中で、アプリを開発サーバーに移動するまで、XP ボックスで自己ホストしています。そのため、今のところ IIS にアクセスできません。

私のサービスをそのように構成した後:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService">
        <endpoint name="MyFileTransferEP"
                  address  = ""
                  binding  = "netTcpBinding"
                  bindingConfiguration="MyFileTransferNetTcpEP"
                  behaviorConfiguration="NetTcpEPBehavior"
                  contract="API.FileTransfer.IFileTransferService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8001/project/filetransfer.svc" />
          </baseAddresses>
        </host>
</service>

そして、私のバインディングは次のとおりです。

<netTcpBinding>
        <binding name="MyFileTransferNetTcpEP"
                 hostNameComparisonMode="StrongWildcard"
                 closeTimeout="00:01:00"
                 openTimeout="00:01:00" 
                 receiveTimeout="00:10:00" 
                 sendTimeout="00:01:00"
                 maxReceivedMessageSize="2147483647"
                 transferMode="Streamed"
                 portSharingEnabled="true">
          <security mode="None">
            <transport clientCredentialType="None" />
            <message clientCredentialType="None" />
          </security>
        </binding>
</netTcpBinding>

SVC ファイルを正しく参照すると、次のエラーが表示されます。

NetTcpBinding をバインドするエンドポイントのスキーム net.tcp に一致するベース アドレスが見つかりませんでした。登録されているベース アドレス スキームは [http] です。

オンラインで読むと、この問題を解決するには、net.tcp バインディングを IIS のアプリケーションのバインディングに追加する必要があることがわかります。しかし、セルフホスティングで IIS にアクセスできない場合はどうすればよいでしょうか?? ところで、これを読んで IIS を「持っている」場合は、次の手順を実行します。IIS で仮想ディレクトリ/アプリケーションを右クリック -> アプリケーションの管理 -> 詳細設定。そして、Enabled Protocols 部分に net.tcp を追加します。

何か案は?


更新: 動作していると思っていましたが、まだ動作していません。これが私が今持っているものです:「スキームnet.tcpに一致するベースアドレスが見つかりませんでした」というエラーがまだ発生しています。あなたの提案を反映するために、すべてのベース アドレスを変更しました。これが私が今持っているものです:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService">
            <endpoint name="MyJSONFileTransferEP"
                      address="json"
                      binding="webHttpBinding"
                      bindingConfiguration="jsonWeb"
                      behaviorConfiguration="WebHttpEPBehavior"
                      contract="API.FileTransfer.IJSONFileTransferService" />
            <endpoint name="MyPOXFileTransferEP"
                      address="pox"
                      behaviorConfiguration="WebHttpEPBehavior"
                      binding="webHttpBinding"
                      bindingConfiguration="poxWeb"
                      contract="API.FileTransfer.IPOXFileTransferService" />
            <endpoint name="MySOAPFileTransferEP"
                      address="filetransfer"
                      binding="netTcpBinding"
                      bindingConfiguration="netTcpWeb"
                      behaviorConfiguration="NetTcpEPBehavior"
                      contract="API.FileTransfer.ISOAPFileTransferService" />
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:2544/filetransfer/" />
              </baseAddresses>
            </host>
          </service>

「net.tcp://localhost:2544」と「net.tcp://localhost:8001」の両方でこれを試しました。ファイアウォール設定に何かを追加 (許可) する必要がありますか? 他の提案はありますか?

App.config ファイル内の filetransferservice の mexTcpBinding は次のとおりです。

<endpoint address="net.tcp://localhost:2544/filetransfer/mex"
        binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"
        name="filetransfermex">
        <identity>
          <certificateReference storeName="My" storeLocation="LocalMachine"
            x509FindType="FindBySubjectDistinguishedName" />
        </identity>
      </endpoint>

Web アプリで FileTransferServiceClient を参照できません。

再度、感謝します。

4

10 に答える 10

44

エラー (WCF): NetTcpBinding をバインドするエンドポイントのスキーム net.tcp に一致するベース アドレスが見つかりませんでした。登録されているベース アドレス スキームは [http] です。

ステップ 1: WAS (Windows Process Activation Service) または非 http プロトコルのサポートは、次のプラットフォームでのみサポートされていることに注意してください。 • Windows Vista • Windows 7 • Windows Server 2008

  1. Windows の機能を有効または無効にするに移動します。
  2. Microsoft .NET Framework 3.5 に移動
  3. Windows Communication Foundation の HTTP アクティベーションを確認する
  4. Windows Communication Foundation の非 HTTP アクティベーションを確認する

手順 2: IIS > WCF ホスト Web サイト > アプリケーションの管理 > 詳細設定 > 有効なプロトコル > 値を HTTP、NET.TCP に設定

于 2012-05-15T07:11:27.970 に答える
26

サービスのベース アドレス(アドレス全体ではなく) のみを定義し、残りをサービス エンドポイントで定義する必要があります。ファイルの最後にあるアドレスfiletransfer.svcは、有効なベース アドレスではありません (実際にはファイル アドレスです)。

<service behaviorConfiguration="transferServiceBehavior" 
         name="API.FileTransfer.FileTransferService">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8001/project/" />
      </baseAddresses>
    </host>
    <endpoint name="MyFileTransferEP"
              address  = "filetransfer"
              binding  = "netTcpBinding"
              bindingConfiguration="MyFileTransferNetTcpEP"
              behaviorConfiguration="NetTcpEPBehavior"
              contract="API.FileTransfer.IFileTransferService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

これとセルフホスティングを使用すると、サービスは完全なアドレスで利用できます。

net.tcp://localhost:8001/project/filetransfer

これは net.tcp であり、セルフホスティングであるため、svc ファイルはまったく必要ありません。

更新: net.TCP ベース アドレスでメタデータを取得できるようにする場合は、<service>セクション内で次のような net.Tcp MEX エンドポイントを公開する必要があります。

        <endpoint name="NetTcpMEX"
                  address="netTcpMex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />
于 2009-11-24T21:47:04.760 に答える
18

IIS の「有効なプロトコル」エントリのスペース => 仮想ディレクトリ/アプリケーションを選択 => 詳細設定 => 有効なプロトコル。例: http、net.tcp。(プロトコルテキスト間のスペース

これはhttp,net.tcpである必要があります (つまり、プロトコル テキストの間にスペースはありません)。

于 2014-03-04T02:50:16.273 に答える
10

多くの解決策を経た後..このブログで最終的な解決策を見つけました..しかし、ここで手順全体を説明します..以下の手順に従う必要があります..

ステップ 1: (Windows プロセス アクティベーション サービス) または http 以外のプロトコルのサポートは、次のプラットフォームでのみサポートされます。 • Windows Vista • Windows 7 • Windows Server 2008

  • Windows の機能を有効または無効にするに移動します。
  • Microsoft .NET Framework 3.5 に移動
  • Windows Communication Foundation の HTTP アクティベーションを確認する
  • Windows Communication Foundation の非 HTTP アクティベーションを確認する

手順 2: IIS > WCF ホスト Web サイト > アプリケーションの管理 > 詳細設定 > 有効なプロトコル > 値をhttp,net.tcp に設定

ステップ2の完了後に問題が解決したかどうかを確認してください..そうでない場合は、以下のステップに従ってください

ステップ 3:administrator-level Command Prompt window、次のコマンドを実行します。

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='8082:*']

IIS を一度再起動しFailed to map the path '/'ないと、例外が発生する可能性があります

アプリケーションの事前設定は次のようになります

ここに画像の説明を入力

于 2016-03-16T08:43:19.017 に答える
9

将来の読者のために。

IIS-Express を使用 していないことを確認してください。

これが私の「落とし穴」でした。

参照:

http://www.iis.net/learn/extensions/introduction-to-iis-express/iis-express-faq

        Q: Does IIS Express support non-HTTP protocols such as net.tcp or MSMQ?
        A: No. IIS Express only supports HTTP and HTTPS as its protocol.

これは、Visual Studio および web.csproj (または同様の) プロパティおよび「Web」左タブの下のプロパティです。「IIS Express を使用する」というチェックボックスがあります。それをオフにします。

それを行った後、「有効なプロトコル」のためにIIS(7)と「http、net.tcp」に移動する必要があります(ここの他の回答で説明されているように)

また、名前付きパイプ固有のエラーが発生している場合。

NetNamedPipeBindingをバインディングするエンドポイントのスキーム net.pipe に一致するベース アドレスが見つかりませんでした。

次に、「net.pipe」をリストに追加する必要があります。

例:

http、net.tcp、net.pipe

名前付きパイプ固有のエラーについては、以下も参照してください。

IIS7 でホストされる名前付きパイプとして WCF を構成する

また、これらの対応する Windows サービス (名前付きパイプまたは tcp またはその両方) を確認してください。

(名前付きパイプ Windows サービス)

NetPipeActivator

Net.Pipe Listener Adapter

Receives activation requests over the net.pipe protocol and passes them to the Windows Process Activation Service.

(TCP Windows サービス)

NetTcpActivator

Net.Tcp Listener Adapter

Receives activation requests over the net.tcp protocol and passes them to the Windows Process Activation Service.
于 2014-12-19T20:47:04.100 に答える
5

[コントロール パネル] -> [プログラム] -> [ウィンドウをオンまたはオフにする] -> [機能] -> [機能の追加] -> [.net フレームワーク] から「Non-Http アクティベーション」ウィンドウ コンポーネントをインストールしてください* 機能 -> Wcf アクティベーション -> 非 HTTP アクティベーション。

于 2011-08-08T11:00:50.387 に答える
1

私は同じ問題を抱えていました(環境:Win7/IIS7.5 .NET4)。ディレクトリ「c:\ Windows\System32\inetsrv」から入手できるappcmd.exeを介してバインディングを構成することで解決しました

"appcmd.exe set pp "Web サイト名/アプリケーション名" /enabledProtocols:http,net.tcp"

注: IIS 構成は階層的であるため、構成を可能な限り低いレベルで変更して、他のアプリケーションでの不要な変更やセキュリティの問題を回避する必要があります。

次のリンクが役立つ場合があります。 http://msdn.microsoft.com/en-us/library/ms788757.aspx http://support.microsoft.com/kb/2803161

これがアルバートに役立つことを願っています

于 2013-05-31T12:20:51.497 に答える