Ответ 1
Ну, похоже, я получил это, чтобы работать. Я все еще не могу найти элемент "Создать приложение" в диспетчере IIS. Эта часть немного разочаровывает, но я рад, что она, похоже, работает в любом случае.
Я создал физический каталог IISHostedCalcService под wwwroot. Это создавало некоторую путаницу; это означало, что http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svc почти работал, но это не должно. Я переместил IISHostedCalcService за пределы wwwroot, и теперь единственным местом для доступа к сервису является http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc.
Затем, обращаясь к http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc, бросали, что" эта коллекция уже содержит адрес со схемой http.
В этой коллекции может быть не более одного адреса для каждой схемы ".Очевидно, что решение заключается в том, чтобы добавить следующее в файл web.config, прямо под system.serviceModel:
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://test.com.cws1.my-hosting-panel.com"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
После этого у меня возникла новая ошибка при обработке http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc: "Название контракта IMetadataExchange не может быть найдено в списке реализованных контрактов службой CalculatorService". Оказывается, решение этого - изменить файл web.config следующим образом (например, добавить раздел поведения и поведениеConfiguration = "SimpleServiceBehavior" в элементе службы):
<configuration>
<system.serviceModel>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://test.com.cws1.my-hosting-panel.com"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior">
...
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleServiceBehavior">
<serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>
Наконец, я смог создать клиентские прокси, указав svcutil на http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/service.svc?wsdl на шаге 5c учебника в http://msdn.microsoft.com/en-us/library/ms733133.aspx. Однако, когда я запустил клиент, я получил сообщение об ошибке "Ошибка вызывающего абонента не была проверена службой". Решение этого было самым простым: просто измените привязку = "wsHttpBinding" на binding = "basicHttpBinding" в сервисе web.config и клиент web.config(или перезапустите svcutil после изменения службы web.config).
В результате web.config выглядел следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://test.com.cws1.my-hosting-panel.com"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior">
<!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc -->
<endpoint address=""
binding="basicHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" policyVersion="Policy15" />
<!-- 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="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>