2013-05-13 3 views
2

Я экспериментировал с WCF и добавил DataContract на свой сервер и обновил ServiceContract. Когда ServiceReference был сначала добавлен к клиенту, я запускал их как на одном компьютере, поэтому я использовал localhost. Ive теперь попытался подключить 2 шт через Ethernet-кабель и таким образом обновить ссылку на службу. Ive установил IP-адрес серверов на LAN-адресе: 192.168.10.10. Следующий код выполняется при нажатии кнопки на форме серверов.Добавление ссылки на службу WCF (отказ)

private void btnCommenceService_Click(object sender, EventArgs e) 
    { 
     host = new ServiceHost((typeof(Service)), new Uri[] { new Uri("http://localhost:9000")}); 
     host.AddServiceEndpoint(typeof(IServices), 
      new WSDualHttpBinding(), 
      "ServerService"); 

     ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
     smb.HttpGetEnabled = true; 
     smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
     host.Description.Behaviors.Add(smb); 

     host.Open(); 
     txtStatus.Text = "Service is open."; 
    } 

Ive повернул брандмауэр выключен на обоих ПК и успешно ping'd адрес "http://192.168.10.10" с клиентского ПК. Мне также удалось получить доступ к некоторой случайной веб-странице, если я наберу ее в свой браузер.

В клиенте, если я нажимаю на мое решение и выбрать «Add Service Reference» и введите

"http://192.168.10.10" "http://192.168.10.10:9000" "http://192.168.10.10:9000/ServerService"

Все они возвращаются с некоторой формой ошибки, как правило, что-то по следующим направлениям:

The document at the url http://192.168.10.10:9000/ was not recognised as a known document type. 
The error message for each known type may help u fix the problem: 
-Report from 'XML Schema' is The document format is not recognised(the content type is 'text/html;charset=utf-8').'. 
Report from DISCO Document is There was an error downloading `'http://localhost:9000/?disco'.'.` 
Unable to connect to the remote server. 
No connection could be made because the target machine actively refused it 127.0.0.1:9000 
etc 

Каждый получил некоторые указатели, почему он не работает по локальной сети пока я могу получить доступ и пинг т он обращается?

+0

Что произойдет, если вы укажете свой браузер на: 'http://192.168.10.10:9000/ServerService?wsdl' – AFischbein

+0

Неверный адрес –

+0

ive только что напечатал telnet 192.168.10.10 9000 в командной строке и, похоже, работает. предполагая, что это означает, что что-то не так с чем-то в самом проекте. У меня нет app.config на стороне сервера. Однако у меня есть клиент. Его полностью ясный atm хотя bar

ответ

0

Наконец-то он работает, но я решил снова перезапустить весь проект сервера. Ive перечислены ниже всех вещей, которые я сделал по-другому, некоторые из них, возможно, были проблемами, другие, возможно, не были.

  1. Создал wcf-сервисную библиотеку вместо того, чтобы просто использовать программу winforms для всего. После того, как библиотека Service была завершена, я ссылался на нее в моем приложении winforms + скопировал код, который был в его app.config, в winforms app.config.

  2. Обратите особое внимание на базовый адрес и адреса конечных точек, так как вам необходимо добавить их вместе, чтобы подключиться к этой конечной точке от Клиента.

  3. Как упоминалось пользователем1467261, я убедился, что могу пинговать в обоих направлениях. Мне пришлось перейти в панель управления -> ..-> сетевые подключения, выберите LAN -> properties -> ipv4 option, а затем укажите уникальный IP-адрес на обоих ПК. (Im guess alot of ppl уже знает об этом, но я не знал, как это сделать.)

  4. Как заявила Feras Salim, обе настройки безопасности оставлены по умолчанию, так как я только что создал нового пользователя на своем ноутбуке с тем же имя пользователя и пароль как другой компьютер.

  5. На стороне клиента я использовал ссылку «Добавить службу».Я не слишком уверен, что используется конечная точка mex, но я просто подключился к базовому адресу и обновил клиентскую часть файла app.config. Не забудьте включить оператор using для пространства имен, которое вы указали при добавлении ссылки на службу.

  6. На стороне сервера, не забудьте использовать свойства, а не поля в пользовательском классе.

Большое спасибо Feras Salim, User1467261 за вашу помощь.

1

попытаться изменить конфигурацию привязки безопасности, как этот

WSDualHttpBinding wsDualBinding= new WSDualHttpBinding(); 
wsDualBinding.Security.Mode = WSDualHttpSecurityMode.None; 
wsDualBinding.Security.Message.ClientCredentialType = MessageCredentialType.None; 

затем добавить службы конечной точки

host.AddServiceEndpoint(typeof(IServices),wsDualBinding,"ServerService"); 

Надеется полезно

+0

Эй, спасибо за информацию (мне было интересно, как установить режим безопасности без app.config, так что для этого :)). К сожалению, она все еще не соединяется. +1 для выше, хотя –

+1

Используете ли вы такую ​​же конфигурацию безопасности с обеих сторон? –

+1

вы можете использовать эту конфигурацию в любых типах привязок, попробуйте изменить привязку к BasicHttpBinding, если вы хотите передавать сообщения в формате мыла (XML), или вы можете использовать WSHttpBinding для передачи их в формате отдыха –

1

Вы подключены напрямую через Ethernet 2 ПК. Вы используете перекрестный кабель? Являются ли 2 компьютера в одной маске подсети? Например. 255.255.255.0?

+0

Да, я получил сервер для отправки клиенту прямо сейчас. Оба имеют одну и ту же маску подсети. Я использую Ethernet-кабель, два из них. Он работал вчера. Он просто с тех пор, как я попытался добавить DataContract и попытаться обновить его по LAN, чтобы он не работал. Ive попытался обновить справочную службу при запуске как клиента, так и сервера на одном компьютере, и он обновляется, но затем я получаю сообщение об ошибке. Невозможно неявно преобразовать тип ClientFrazMan.ServerService.MyData [] в System.Collections.Generic.List . у меня будет большой перерыв. +1 для ур помочь :) –

Смежные вопросы