Как настроить службу WCF с wsHttpBinding, размещенной на IIS и расходуемой через Интернет?
У меня нет опыта работы со службой WCF в целом (это моя первая попытка создания, настройки и использования службы WCF).
- Я создал службу WCF, протестировал ее с помощью клиента тестирования WCF (на компьютере разработчика) в " Visual Studio", и все заработало.
- Я разместил его в IIS на нашем сервере (не на компьютере разработчика), добавив его в пул приложений ASP.Net v4.0, протестировал его с приложением Windows Forms (с компьютера разработки), в котором я добавил ссылку на службу для размещенной службы WCF. и все работало.
- Я пробовал то же приложение (и application.config) с домашнего компьютера, и я получаю эту ошибку: "Служба не прошла проверку подлинности".
Я пытался "Google it" и большинство из них сказали, что ошибка вызвана компьютерами в другом Домене (что ожидается, потому что мой Домашний ПК и Сервер на работе даже не находятся в одной сети), но я предполагаю, что WCF является расходным материалом через Интернет или я предполагаю, что неправильно?
On Development PC, WCF Service address is redirected to Local IP of Server PC. I've also added REST/Web Service because I need to POST some data and it's consumable without any problems.
Я что-то упускаю?
Web.config:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<services>
<service name="TestWCF.TestServis">
<endpoint address="TestWCF" binding="wsHttpBinding" contract="TestWCF.ITestServis" />
</service>
<service name="TestWCF.TestPushingServis">
<endpoint address="" binding="webHttpBinding" contract="TestWCF.ITestPushingServis" behaviorConfiguration="web" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!-- 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"/>
</system.webServer>
</configuration>
Application.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ITestServis"
maxReceivedMessageSize="2147483647" />
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://testdomain.com:12345/TestServis.svc/TestWCF"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITestServis"
contract="TestServisReference.ITestServis"
name="WSHttpBinding_ITestServis">
<identity>
<servicePrincipalName value="host/ServerName" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
1 ответ
Для wsHttpBinding вам может потребоваться установить учетные данные Windows (имя пользователя, пароль и домен Windows) с помощью свойства ClientCredentials.
yourClient.ClientCredentials.Windows.ClientCredential.UserName = "name"
yourClient.ClientCredentials.Windows.ClientCredential.Password = "password"
yourClient.ClientCredentials.Windows.ClientCredential.Domain = "domain"
Кроме того - вы можете попытаться установить режим безопасности на нет в вашей привязке:
<security mode="None" />
Надеюсь, поможет,
Pawel