2016-12-20 20 views
0

Я получаю эту ошибку «Не удалось найти конечную точку с именем ...» при попытке запустить приложение Vb6, которое использует .Net dll, на который ссылается служба WCF. Уверен, что это должно быть что-то, что нужно решать с конфигурационным файлом. Поскольку файл конфигурации в dll выглядит абсолютно нормально и имеет правильные настройки конечных точек, я подозреваю, что мне может понадобиться файл app.config для приложения VB6, поскольку это приложение-вызывающее устройство, которое в идеале должно потреблять службу WCf через C# dll. Было бы здорово, если бы кто-то мог подумать о том, как это нужно решать.VB с использованием WCF: не удается найти элемент конечной точки через com wrapped C# dll

+0

Вы ответили на свой вопрос самостоятельно. Для исполняющего приложения требуется config, а не dll. В следующий раз попробуйте сначала ... – Rabban

+0

Абсолютно верно. Но трудность, стоящая перед вами, находится в файле конфигурации для VB. Я поместил файл конфигурации в место, где запускается приложение VB6. Формат - VB6.exe.config, но я получаю ту же ошибку, что и раньше. Есть что-то, чего не хватает –

+0

Я действительно не владею vb6, но, возможно, [это] (https://msdn.microsoft.com/en-us/library/aa719108 (v = vs.71) .aspx) будет пролить немного света. – Rabban

ответ

1

Я нашел ответ для этого. На основе подхода, следующего за VB6-> C# DLL-> WCF Service, служба WCF будет искать файл конфигурации для исполняющей сборки, которая в основном является VB6 exe. Это приведет к ошибке «Не удается найти элемент конечной точки ...». Поэтому, чтобы разрешить это, я вручную попытался установить свойства привязки в обернутой оболочкой C# dll и передал в объект привязки вместе с EndPointAddress конструктору службы при создании экземпляра. Ниже приведен фрагмент кода, который устанавливает свойства привязки, аналогичные свойствам файла конфигурации.

 Binding.SendTimeout = TimeSpan.FromMinutes(1); 
     Binding.OpenTimeout = TimeSpan.FromMinutes(1); 
     Binding.CloseTimeout = TimeSpan.FromMinutes(1); 
     Binding.ReceiveTimeout = TimeSpan.FromMinutes(10); 
     Binding.AllowCookies = false; 
     Binding.BypassProxyOnLocal = false; 
     Binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; 
     Binding.MessageEncoding = WSMessageEncoding.Text; 
     Binding.TextEncoding = System.Text.Encoding.UTF8; 
     Binding.TransferMode = TransferMode.Buffered; 
     Binding.UseDefaultWebProxy = true; 

Это может быть один из возможных путей решения этой проблемы, если кто-то сталкивается с подобной проблемой.