1

WCF サービスをホストしている Windows サービスと、それと通信する WPF アプリケーションがあります。WPF アプリケーションは、同じネットワーク上の別のマシン上にあります。WCf メッセージを送信するときに、2 つの間のセキュリティの設定に問題があります。サーバーとクライアントの app.config ファイルは次のとおりです。

サーバ

    <?xml version="1.0"?>
    <configuration>
      <system.serviceModel>
        <services>
      <service behaviorConfiguration="WCFBehavior" name="WCF.WCFService">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
          name="NetTcpBindingEndpoint" contract="WCF.IWCFService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          name="MexTcpBindingEndpoint" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8731/WCFService/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="WebHttp">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="WCFBehavior">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceTimeouts transactionTimeout="05:05:00" />
          <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500"
            maxConcurrentInstances="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <wsDualHttpBinding>
        <binding name="WCFBinding">
          <security mode="None">
          </security>
        </binding>
      </wsDualHttpBinding>
      <webHttpBinding>
        <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
      </webHttpBinding>
    </bindings>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="lib" />
    </assemblyBinding>
  </runtime>
</configuration>

クライアント

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="lib" />
    </assemblyBinding>
  </runtime>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBindingEndpoint" closeTimeout="00:01:05"
          openTimeout="00:00:05" receiveTimeout="00:00:20" sendTimeout="00:00:20"
          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
          hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
          maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="None">
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://localhost:8731/WCFService/" binding="netTcpBinding"
        bindingConfiguration="NetTcpBindingEndpoint" contract="WCFServiceReference.IWCFService"
        name="NetTcpBindingEndpoint">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

クライアントをサービスに正常に接続させる唯一の方法は、クライアント マシンで使用しているアカウントと同じユーザー名とパスワードを使用してサーバー上にユーザーを作成することです。これを回避するためにセキュリティを設定するにはどうすればよいですか? 私はクライアントとサーバーの両方を制御できるので、高度なセキュリティを確保する必要はありません。

4

2 に答える 2

0

おそらくUserNameのCredentialTypeが必要です。現在、デフォルトのWindowsを取得しています。

WCFでの認証、承認、およびID

于 2012-09-19T11:38:15.393 に答える
0

サーバー上のユーザー資格情報を使用してデータベースをセットアップできます。また、ユーザーリクエストを認証するために、クライアントからのユーザー資格情報がデータベースサーバーで検証されている場合は、サーバー上にユーザーを動的に作成できます。

于 2012-09-19T06:45:29.287 に答える