Извините за долгое выражение о проблеме... Я провел две недели отладки и много заметок...
У меня есть служба данных WCF и другой процесс, пытающийся подключиться к нему как клиент через TCP и/или HTTP.
У меня есть очень простое тестовое клиентское приложение, которое, кажется, прекрасно подключается, но более сложное производственное приложение не может подключиться (ни TCP, ни HTTP). В обоих проектах клиента я позволяю Visual Studio 2008 генерировать app.config с помощью "Добавить ссылку на службу" и позволяя ему извлекать метаданные из службы данных.
Вот код для простого тестового клиента, который работает:
using Client.MyDataService;
namespace Client
{
class Program
{
static void Main(string[] args)
{
MyDataServiceClient client = new MyDataServiceClient("net.tcp");
client.GetRecords();
}
}
}
Вот код для более сложного, производственного клиента:
DataServiceManager.cs:
using MyServer.MyDataService;
namespace MyServer.DataServiceBridge
{
class DataServiceManager
{
MyDataServiceClient dataServiceClient = new MyDataServiceClient("net.tcp");
}
}
В основном процессе:
DataServiceManager d = new DataServiceManager();
Вот файл app.config как для простого клиентского, так и для производственного клиента:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="net.tcp" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false"
transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10"
maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://localhost:8888/MyDataService"
binding="netTcpBinding" bindingConfiguration="net.tcp" contract="MyDataService.IMyDataService"
name="net.tcp">
<identity>
<userPrincipalName value="COMPUTER_NAME\Username" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
-
В папке MyServer bin\Debug \ MyServer.exe, app.config.
-
В MyDataSeriviceHost bin\Debug \ папка MyDataService.exe, app.config и MyDataSeriviceHost.exe.config. app.config и MyDataSeriviceHost.exe.config - идентичны.
Вот сообщение об ошибке:
An exception of type 'System.InvalidOperationException' occurred in System.ServiceModel.dll but
was not handled in user code
Additional information: Could not find endpoint element with name 'net.tcp' and contract
'MyDataService.IMyDataService' in the ServiceModel client configuration section.
This might be because no configuration file was found for your application, or because no endpoint
element matching this name could be found in the client element.
Любые идеи, что происходит? Я довольно сильно измучил Google.: - (