Я знаю, что это было избито до смерти, но я не могу заставить это работать так, как должно.
У меня есть служба WCF с несколькими контрактами.
Все они работают нормально, когда вы вызываете их напрямую, например. http://merlin.com/CompanyServices/CompanyWcfService.svc/Get_Document_Dates_Received/223278
Я использовал эту службу WCF успешно в InfoPath Forms и Nintex Workflows.
Теперь я создаю простое приложение ASP.Net, например, в http://www.webcodeexpert.com/2013/04/how-to-create-and-consume-wcf-services.html.
Мне удалось добавить ссылку на службу, как описано в статье.
Я добавил кнопку в форму и добавил следующий код в событии Button1_Click
:
protected void Button1_Click(object sender, EventArgs e)
{
ServiceReference1.CompanyWcfServiceClient x = new ServiceReference1.CompanyWcfServiceClient();
var result = x.Get_Document_Dates_Received("223278");
}
когда я нажимаю на кнопку, я получаю сообщение об ошибке:
"Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт ServiceReference1.ICompanyWcfService в разделе конфигурации клиента ServiceModel. Возможно, это связано с тем, что файл конфигурации не найден для вашего приложения или потому, что никакой элемент конечной точки, соответствующий этому контракту, не может быть найден в клиентский элемент."
Итак, я попытался добавить следующее к web.config: (скопировано непосредственно из файла web.config CompanyWcfService.
<system.serviceModel>
<services>
<service name="CompanyWcfServices.CompanyWcfService" behaviorConfiguration="ServiceBehavior">
<endpoint address="" binding="webHttpBinding" contract="CompanyWcfServices.ICompanyWcfService" behaviorConfiguration="webHttpEndpointBehavior" >
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">
</endpoint>
</service>
</services>
<bindings>
<webHttpBinding>
<binding>
<security mode="None">
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name ="webHttpEndpointBehavior">
<webHttp helpEnabled ="true" faultExceptionEnabled="true" automaticFormatSelectionEnabled="true"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
Я получаю ту же самую точную ошибку, должно быть что-то еще происходит.
Я, наконец, сдался и назвал эту услугу следующим образом:
HttpWebRequest request = WebRequest.Create(@"http://merlin/Companyservices/CompanyWcfService.svc/Get_Document_Dates_Received/223278") as HttpWebRequest;
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = null;
var result = "";
try
{
response = request.GetResponse() as HttpWebResponse;
if (response.StatusCode == HttpStatusCode.OK)
{
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
result = reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
result = "";
}
Я потратил часы на чтение сообщений, и большинство из них предлагает скопировать конфигурационную информацию в файл web.config. Мне это кажется проблематичным (кроме того, что он не работает). Что делать, если мне нужно использовать стороннюю службу WCF? Должен ли я запрашивать информацию о конфигурации от третьего лица? И Visa Versa, если я создаю службу WCF, предназначенную для использования третьими лицами, мне нужно также предоставить им файл конфигурации?