Работа с именованными каналами в WCF, исключение PipeException? - PullRequest
1 голос
/ 21 марта 2012

Несмотря на многочисленные поиски и прочтение таких статей, как: Изучение привязки именованных каналов WCF - часть 1 (включая части 2 и 3 включительно), я не смог заставить свой сервис работать должным образом.

Вот мой конфиг:

<system.serviceModel>
  <client>
    <endpoint address="net.pipe://localhost/GlobalPositioningService"
              binding="netNamedPipeBinding" 
              contract="GI.Services.GlobalPositioning.Contracts.IGlobalPositioning" />
  </client>
  <services>
    <service name="GI.Services.GlobalPositioning.Services.GlobalPositioningService">
      <endpoint address=""
                binding="wsHttpBinding"
                contract="GI.Services.GlobalPositioning.Contracts.IGlobalPositioning">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="net.pipe://localhost/GlobalPositioningService"
                binding="netNamedPipeBinding"
                contract="GI.Services.GlobalPositioning.Contracts.IGlobalPositioning" />
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8080/GlobalPositioningService/"/>
        </baseAddresses>
      </host>
    </service>
  </services>

Затем я пытаюсь проверить мой сервис через Named Pipes:

[TestFixture]
public class GlobalPositioningServiceTests {
    [TestFixtureSetUp]
    public void SetUpHost() {
        var channelFactory = new ChannelFactory<IGlobalPositioning>(binding, new EndpointAddress(address));
        channelFactory.Open();
        service = channelFactory.CreateChannel();
    }

    private const string address = "net.pipe://localhost/GlobalPositioningService";
    private static readonly Binding binding = new NetNamedPipeBinding();
    private static IGlobalPositioning service;
}

И я также попробовалдругой способ, используя экземпляр ServiceHost:

    [TestFixtureSetUp]
    public void SetUpHost() {
        host = new ServiceHost(typeof(GlobalPositioningService));
        host.AddServiceEndpoint(typeof(IGlobalPositioning), binding, address);
        host.Open();
        service = new GlobalPositioningService();
    }

И я всегда получаю эту ошибку с трассировкой стека:

Ошибка 2 Test 'GI.Services.GlobalPosition.Services.Tests.GlobalPositionServiceTests.GetGlobalPositionWorksWithDiacriticsInMunicipalityName ("143, rue Marcotte, Sainte-Anne-de-la-P \ x00E9rade", 46.5736528d, -72.2021346d) 'не удалось: System.ServiceModel.EndpointNotFoundExpoint: конечное прослушивание: не былоlocalhost / GlobalPositionService, который может принять сообщение.Это часто вызвано неправильным адресом или действием SOAP.Смотрите InnerException, если имеется, для более подробной информации.----> System.IO.PipeException: конечная точка канала 'net.pipe: // localhost / GlobalPositionService' не найдена на вашем локальном компьютере.

Трассировка стека сервера: в System.ServiceModel.Channels.PipeConnectionInitiator.GetPipeName (Uri uri) в System.ServiceModel.Channels.NamedPipeConnectionPoolRegistry.NamedPipeConnectionPool.GetPoolKer через точку доступа к точке доступа.CommunicationPool`2.TakeConnection (адрес EndpointAddress, Uri via, тайм-аут TimeSpan, TKey и ключ) в System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection (тайм-аут TimeSpan) в System.ServiceModel.Channels.ClientFraouterOcuSenseSourceSenseSpaceSpaceSpaceSpaceSpaceSpaceSpaceSpaceSpaceSpaceSpaceSpaceSpaceStation.Channels.CommunicationObject.Open (Тайм-аут TimeSpan) в System.ServiceModel.Channels.ServiceChannel.OnOpen (Тайм-аут TimeSpan) в System.ServiceModel.Channels.CommunicationObject.Open (Тайм-аут TimeSpan) в System.ServicenelSOpenShanOpenShanCoSenseChanCoreShanCoreShanCoreShanCoreShanCoreShanCoreShanCoreShanCoreShanCoreShanCoreShanConeChanerCanerShanCenceChanSerChanerShanCenceShanC)..ServiceModel.Channels.ServiceChannel.ICallOnce.Call (канал ServiceChannel, время ожидания TimeSpan) в System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce (тайм-аут TimeSpan, каскад CallOnceManager) в System.ServiceModel.Channels.ServiceChannel.EnsureOpened (тайм-аут TimeSpan) в System.ServiceModel.Channels.ServiceChannel.Call (строковое действие, логическая операция [onewtime, Object Object [операционная], Object Objectunun, ProxyOperationR)] outs, TimeSpan timeout) в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, операция ProxyOperationRuntime) в System.ServiceModel.Channels.ServiceChannelProxy.Invoke (сообщение об отправке IMessage) * 10 * 10 * 10в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (тип MessageData & msgData, Int32) в GI.SetloGloGlobalSignSigning.(String mailingAddress) в GI.Services.GlobalPposition.Services.Tests.GlobalPositionServiceTests.GetGlobalPositionWorksWithDiacriticsInMunicipalityName (строковый адрес, двойная широта,Двойная долгота) в C: \ Open \ Projects \ Framework \ Src \ GI.Services \ GI.Services.GlobalPosition.Services.Tests \ GlobalPositionServiceTests.cs: строка 27 - Исключение Cipe \: Open \ Projects \ Framework \ Src \ GI.Services \ GI.Services.GlobalPosition.Services.Tests \ GlobalPositionServiceTests.cs 27

Для вашей информации я использую:

  1. Visual Studio 2010
  2. Windows 7
  3. NUnit

И мой сервис содержится в библиотеке служб WCF.

1 Ответ

1 голос
/ 21 марта 2012

Похоже, что вы пытаетесь провести интеграционное тестирование с работающим экземпляром вашей службы, используя netNamedPipesBinding. Для этого необходимо, чтобы хост службы предоставлял экземпляр вашей службы и экземпляр прокси-сервера службы, который использовался для вызовов службы. Вы можете попробовать объединить оба кода в обоих ваших примерах методов TestFixtureSetup, чтобы создать экземпляр как узла службы, так и прокси службы (результат метода CreateChannel). Для примера, как это сделать, посмотрите на это сообщение в блоге .

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