Использование автономного сервиса WCF с другого компьютера - PullRequest
4 голосов
/ 30 октября 2009

Я разработал автономный сервис WCF с использованием basicHttpBinding, и все работает нормально, когда клиент находится на локальной машине. Но когда я пытаюсь подключиться с любого компьютера в сети, он просто отключается и выдает следующую ошибку:

There was an error downloading 'http://192.168.0.59:8888/DannyService?wsdl'.
Unable to connect to the remote server
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.59:8888
Metadata contains a reference that cannot be resolved: 'http://192.168.0.59:8888/DannyService?wsdl'.
Could not connect to http://192.168.0.59:8888/DannyService?wsdl. TCP error code 10060:     A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.59:8888. 
Unable to connect to the remote server
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.59:8888
If the service is defined in the current solution, try building the solution and adding the service reference again.

Я предполагаю, что мне не хватает какой-то фундаментальной (и, несомненно, смущающе очевидной) проблемы, и я буду очень благодарен, что мне ее указали.

Ниже приведен пример программы + app.config, который иллюстрирует то же поведение, которое я испытываю с реальной системой, то есть она работает отлично на локальном уровне, но когда я пытаюсь подключиться (к http://192.168.0.59:8888/DannyService?wsdl или к http://192.168.0.59:8888/DannyService) с любой другой машины, время ожидания истекло.

namespace DannyService
{
    using System;
    using System.Reflection;
    using System.ServiceModel;

    [ServiceContract]
    interface IDannyControl
    {
        [OperationContract]
        string SayHi();
    }

    class DannyControl
        : IDannyControl
    {
        public string SayHi()
        {
            return "Hi!";
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(DannyControl));

            host.Open();

            Console.ReadLine();

            host.Close();
        }
    }
}

и

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DannyServiceBehaviour">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="DannyService.DannyControl" behaviorConfiguration="DannyServiceBehaviour">
        <host>
          <baseAddresses>
            <add baseAddress="http://192.168.0.59:8888/DannyService"/>
          </baseAddresses>
        </host>
        <endpoint address="danny" binding="basicHttpBinding" contract="DannyService.IDannyControl" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

Большое спасибо заранее.

1 Ответ

2 голосов
/ 30 октября 2009

Вы убедились, что у вас нет службы брандмауэра, которая запускает и блокирует эти запросы? Возможно, вам придется специально добавить правило исключения для вашего пользовательского хост-приложения (или порта tcp)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...