Я создал сервис 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?
@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, но все равно не повезло!
Я описал это поведение в моем сообщении
Ваша «веб-конечная точка» будет представлена как конечная точка JSON. Он несовместим с WSDL.