Пользовательская привязка WCF с tcpTransport - PullRequest
0 голосов
/ 11 июля 2019

У меня есть служба WCF, размещенная в службе Windows, которая работает в той же сети, используя свои собственные учетные данные.Безопасность не важна.Тем не менее, скорость и надежность важны.

Итак, я попытался с привязкой netTcpBinding.Тем не менее, я заметил это, когда я ссылаюсь на Сервис в клиенте.Он добавляет в файл конфигурации тег identity с информацией учетной записи, на которой запущена служба:

<identity>
    <userPrincipalName value="account@domain" />
</identity>

Я действительно не хочу, чтобы это было в файле конфигурации клиента, и яхочу передать это программно.

Когда я использую вместо basicHttpBinding, я заметил, что он не добавляет этот тег.Тем не менее, я все еще хочу придерживаться net.tcp.Итак, моей следующей попыткой было использование customBinding

Итак, вот где моя проблема.Я не могу ссылаться на пользовательскую привязку к клиенту.Может кто-нибудь проверить мою конфигурацию?Также.Будет ли этого достаточно, чтобы полностью игнорировать тег идентификации?Если это не правильный путь, что будет правильным?Спасибо

<system.serviceModel>
    <services>
        <service name="LicenseServiceLogic.LicenseService">
            <endpoint address="net.tcp://localhost:8000/LicenseService"
                      binding="myCustomBinding"
                      contract="LicenseServiceLogic.ILicenseService">
            </endpoint>
        </service>
    </services>
    <bindings>
      <customBinding>
          <binding name="myCustomBinding">
              <compactMessageEncoding>
               <binaryMessageEncoding/>
              </compactMessageEncoding>
              <tcpTransport listenBacklog ="100" 
                            maxBufferPoolSize ="524288" 
                            maxBufferSize ="2147483647" 
                            maxReceivedMessageSize ="2147483647"/>
          </binding>
      </customBinding>
   </bindings>
   <client>
    <endpoint binding="customBinding" 
              bindingConfiguration="myCustomBinding"
              contract="IMetadataExchange"
              name="http" />
   </client>
</system.serviceModel>

1 Ответ

1 голос
/ 12 июля 2019

Во-первых, причина, по которой мы не можем ссылаться на пользовательскую привязку к клиенту, заключается в том, что мы должны добавить конечную точку службы MEX и включить поведение метаданных службы. Как показано ниже,

    <system.serviceModel>
      <services>
        <service name="VM1.MyService" behaviorConfiguration="mybehavior">
          <endpoint address="" binding="netTcpBinding" contract="VM1.IService" bindingConfiguration="mybinding">
          </endpoint>
          <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
          <host>
            <baseAddresses>
              <add baseAddress="net.tcp://localhost:5566"/>
            </baseAddresses>
          </host>
        </service>
      </services>
      <bindings>
        <netTcpBinding>
          <binding name="mybinding">
            <security mode="None"></security>
          </binding>
        </netTcpBinding>
      </bindings>
      <behaviors>
        <serviceBehaviors>
          <behavior name="mybehavior">
            <serviceMetadata />
          </behavior>
        </serviceBehaviors>
      </behaviors>
</system.serviceModel>

Кроме того, если мы не хотим добавлять тег идентификации в конфигурацию клиента, нам просто нужно установить для режима безопасности значение НЕТ. Как показано выше.
Для деталей конечной точки Mex.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/metadata
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...