Не забывайте, что можно добавить точку (.
) вначале для сокрытия файлов и папок... Иначе я следовал бы *, ОТКЛОНЯЮТ соглашение о присвоении имен (из Википедии):
Большинство файловых систем UNIX
/
, null
. Что-то, что я заметил: похоже, что конфигурации клиента и сервера не согласуются с режимом безопасности.
В исходном разделе у вас есть <безопасность> .... .
в web.config (опущен mode = "message") и
на стороне клиента.
После вашего редактирования кажется, что клиентская сторона не изменилась , но сервер (web.config) теперь содержит
.
На самом деле вопрос: можете ли вы гарантировать, что между клиентом всегда будет только один сетевой участок а вызываемый сервер? Т.е. это за корпоративным файерволом? В этом случае я бы рекомендовал привязку netTcp с
на обоих концах.
Если это не так, то вы можете использовать wsHttpBinding (который поддерживает больше функций безопасности и надежности, но работает медленнее и «тяжелее») или basicHttpBinding. В этом случае вам придется использовать
на обоих концах и аутентифицировать службу с помощью сертификата (чтобы служба и клиент имели общий "секрет", который следует использовать для шифрования).
Я бы постарался для начала опустить части олицетворения и просто запустить и запустить базовую связь и взаимную аутентификацию между службой и клиентом - как только это будет сделано, вы можете начать добавлять к нему биты олицетворения и вы всегда можете вернуться к известной конфигурации, которая работает.
Дэвид Сакштейн написал отличную серию сообщений в блоге , объясняющих пять сценариев безопасности, которые отраслевой гуру Джувал Лоуи назвал (в своей книге Программирование WCF - Библии WCF) наиболее общие и наиболее полезные - чтобы ограничить количество возможных комбинаций параметров, которые вы, возможно, захотите настроить. Один из них - сценарий «Интернет», который, вероятно, применим и здесь, если ваша служба ориентирована вовне.
Marc
Для меня текущая настройка действительно работает:
На сервере:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="wsHttpBindingConf" useDefaultWebProxy="true"/>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="returnFaults" name="Epze.BusinessLayer.ZeitManager">
<endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpBindingConf" contract="Epze.Contract.IZeitManager"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="returnFaults">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceAuthorization impersonateCallerForAllOperations="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Установите следующий атрибут для всех методов для WCF:
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
На клиенте:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IZeitManager" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
<message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="Delegation">
<clientCredentials>
<windows allowedImpersonationLevel="Delegation" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address="http://server.mydomain.net/ePZEsvc/ZeitManager.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IZeitManager"
contract="External.Epze.IZeitManager" name="WSHttpBinding_IZeitManager" behaviorConfiguration="Delegation">
<identity>
<servicePrincipalName value="HOST/localhost"/>
</identity>
</endpoint>
</client>
</system.serviceModel>
HTH, Sven