Адрес конечной точки WCF в VS 2010 - PullRequest
1 голос
/ 05 декабря 2011

У меня есть простой веб-сервис. Это используется на веб-сайте с использованием VS 2010. Я добавил ссылку на службу с помощью параметра «Добавить ссылку на службу» в VS 2010. Она работает нормально. Он печатает адрес службы как http://localhost:3187/Service1.svc/MyFolder. Но когда я набираю этот адрес службы в браузере, появляется сообщение HTTP Error 400.

Примечание. Когда я заменяю адрес = "MyFolder" на адрес = "" в конечной точке службы, http://localhost:3187/Service1.svc показывает результат.

Какой правильный адрес я должен набрать в браузере, чтобы получить службу с адресом «MyFolder»?

Страница:

namespace ClientWebApp
{
  public partial class Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
        Service1Client myClientService = new Service1Client();
        Response.Write(myClientService.Endpoint.Address);

        string result = myClientService.GetData(7);
        lblName.Text = result;
    }
  }
}

Контракт:

namespace MyWCFServiceApplication
{
  [ServiceContract]
  public interface IService1
  {
    [OperationContract]
    string GetData(int value);
  }

  public class MyService : IService1
  {
    public string GetData(int value)
    {
        return string.Format("Now entered:  {0}", value);
    }
  }
}

Конфигурация:

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>

  <system.serviceModel>

    <services>
      <service name="MyWCFServiceApplication.MyService"
               behaviorConfiguration="WeatherServiceBehavior">

        <endpoint address="MyFolder"
                  binding="wsHttpBinding"
                  contract="MyWCFServiceApplication.IService1" />

        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="WeatherServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

  </system.serviceModel>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Обратите внимание на ответ на этот вопрос: Конечные точки WCF и проблемы конфигурации привязки

Цитата:

При размещении службы WCF в IIS базовый адрес службы формируется в следующем формате: {Протокол}: // {хост}: {порт} / {ApplicationName} / {svcFileName}. Это адрес, который вы можете просмотреть, чтобы получить страницу справки WCF и / или метаданные (в конфигурации по умолчанию).

Чтобы сформировать фактический адрес конечной точки (тот, который нужен вашему клиенту) использовать), используется следующий формат: {ServiceBaseAddress} / {EndpointAddress}

В вашем случае {endpointAddress} - это MyFolder, что объясняет, почему вы можете добавить сервисную ссылку, используя адрес http://localhost:3187/Service1.svc/MyFolder. Однако это не тот адрес, на котором отображается ваша страница справки и информация о метаданных, поэтому тот факт, что вы получаете HTTP-ошибку 400 на http://.../*.svc/MyFolder, неудивителен.

0 голосов
/ 05 декабря 2011

попробуйте добавить «? Wsdl» в конец URL, с которым вы пытаетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...