“Не удалось найти элемент конечной точки с именем …”

Извините за длинный проблемный оператор... Я провел два дня, отлаживая и имею много примечаний...

У меня есть услуга передачи данных 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>
  • В bin\Debug\папке MyServer MyServer.exe, app.config.

  • В bin\Debug\папке MyDataSeriviceHost 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.:-(

12
задан John Saunders 6 July 2010 в 18:20
поделиться

2 ответа

SOLVED

Получается, что у нас есть exe, который загружает DLL. DLL содержит WCF клиент. При компиляции генерируется MyServer.dll.config, но так как exe нативный (не .NET), он не считывает .config файл автоматически. Нам нужно сделать это вручную. Эта ссылка позволила мне загрузить конфиг вручную и создать CustomChannelFactory<> для решения этого вопроса.

Для тех, кому нужно то же самое, вот ссылка, которая привела к решению: http://www.paraesthesia.com/archive/2008/11/26/reading-wcf-configuration-from-a-custom-location.aspx

18
ответ дан 2 December 2019 в 05:39
поделиться

Может быть так, как вы написали, но звучит как ваш config файл неправильно копируется в каталог. Имя должно совпадать с именем вашего приложения, а не app.config. Если вы попытаетесь изменить имя файла app.config на [ваше имя exe] .exe.config поможет.

3
ответ дан 2 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

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