Выставьте webHttpBinding конечную точку в сервисе WCF

Я создал сервис WCF и выставил три конечных точки, которые являются basicHttpBinding, wsHttpBinding и webHttpBinding. Это - тестовый сервис для моих экспериментов с WCF. Но, каждый раз, когда я добавляю сервисную ссылку использование .svc файла, я только становлюсь два (основным и ws) конечные точки. Кажется, нет трети (webHttpBidning) конечной точки, выставляемой по некоторым причинам.

Для репродуцирования этой проблемы создайте проект приложения WCF, удалите сервис Service1, добавьте новый объект> сервис WCF под названием TestService и измените файл конфигурации на следующее:

<system.serviceModel>
<services>
  <service name="WcfTestService.TestService" behaviorConfiguration="TestServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost/WcfTestService/TestService.svc"/>
      </baseAddresses>
    </host>
    <endpoint address="basic"
              binding="basicHttpBinding"
              contract="WcfTestService.ITestService" />
    <endpoint address="ws"
              binding="wsHttpBinding"
              contract="WcfTestService.ITestService" />
    <endpoint address="web"
              binding="webHttpBinding"
              contract="WcfTestService.ITestService" />
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="TestServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="webBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
</behaviors>

Вот код для ITestService.cs:

[ServiceContract]
public interface ITestService
{
    [OperationContract]
    [WebInvoke]
    Boolean ValidateUser(User user);
}

[DataContract]
public class User
{
    [DataMember(Name = "Name")]
    public String UserName { get; set; }
    [DataMember]
    public String Password { get; set; }
}

и для TestService.svc

public class TestService : ITestService
{
    public bool ValidateUser(User user)
    {
        if (user.UserName == "User" && user.Password == "123")
        {
            return true;
        }
        return false;
    }
}

Я попробовал другую комбинацию параметров WebInvoke и параметров WebGet, но перестал работать.

Кто-либо может сказать мне, почему третья конечная точка не обнаруживается в файле WSDL?

10
задан decyclone 14 June 2010 в 09:03
поделиться

2 ответа

@decyclone: ​​Я успешно открыл webHttpBindings без каких-либо проблем. Но я обнаружил кое-что интересное, когда его обнажают, а когда нет!

Я вижу, что веб-привязка отображается в тестовом клиенте Wcf.

Вот мои конфигурации.

<services>
  <service behaviorConfiguration="TestWeb.Service2Behavior" name="TestWeb.Service2">
    <endpoint address="" binding="wsHttpBinding" contract="TestWeb.Service2">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="web" binding="webHttpBinding" contract="TestWeb.Service2">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>

Следует отметить, что он отлично работает с VS2008 с Framework 3.5, VS2010 с Framework 3.5, когда я использую VS2010 и Framework 4.0, я не вижу, чтобы WebHttpBinding отображался в тестовом клиенте WCF. , однако я могу использовать этот binidng для публикации http во всех случаях.

Я предполагаю, что в Framework 4.0 он не отображается по умолчанию, даже я пытаюсь включить endpointDiscovery, но все равно не повезло!

Я описал это поведение в моем сообщении

5
ответ дан 4 December 2019 в 02:49
поделиться

Ваша «веб-конечная точка» будет представлена ​​как конечная точка JSON. Он несовместим с WSDL.

2
ответ дан 4 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: