Если вы не укажете фабрику в файле .svc, все конечные точки будут получены из файла web.config - WCF попытается найти элемент <system.serviceModel / service>
, атрибут name
которого полностью соответствует -квалифицированное имя класса обслуживания.Если он не найдет его, он добавит конечную точку по умолчанию (используя basicHttpBinding
, если вы не изменили отображение по умолчанию).Похоже, это то, с чем вы сталкиваетесь.Убедитесь, что атрибут «name» элемента <service>
совпадает со значением атрибута Service
в файле .svc, и у вас должны быть хорошо работающие две конечные точки.
Еще одну вещь, которую вы можете попробоватьдля этого нужно включить трассировку в сервисе (уровень = информация), чтобы увидеть, какие конечные точки были фактически открыты в сервисе.Изображение ниже:
![SvcTraceViewer image](https://i.stack.imgur.com/CQTiR.png)
Сервер для этого примера не имеет значения:
namespace MyNamespace
{
[ServiceContract]
public interface ITest
{
[OperationContract]
string Echo(string text);
}
public class Service : ITest
{
public string Echo(string text)
{
return text;
}
}
}
Service.svc не имеет заводской установки:
<% @ServiceHost Service="MyNamespace.Service" Language="C#" debug="true" %>
И web.config определяет две конечные точки, которые показаны в трассировках:
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="ServiceModelTraceListener">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="C:\temp\web_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
<filter type="" />
</add>
</sharedListeners>
<trace autoflush="true"/>
</system.diagnostics>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="Web">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="MyNamespace.Service">
<endpoint address="basic" binding="basicHttpBinding" bindingConfiguration=""
name="basic" contract="MyNamespace.ITest" />
<endpoint address="web" behaviorConfiguration="Web" binding="webHttpBinding"
bindingConfiguration="" name="web" contract="MyNamespace.ITest" />
</service>
</services>
</system.serviceModel>
</configuration>
Обратите внимание, что в слушателе отображается дополнительный слушатель, это «страница справки» изWCF (тот, который сообщает, когда вы просматриваете его, что в службе не включены метаданные).
Вы можете попробовать сравнить эту настройку с вашей или начать с этой простой, затем запуститьдобавление компонента от вашего, пока вы не затронули проблему.Это поможет локализовать проблему.
Удачи!