2016-02-16 2 views
0

У меня есть служба WCF, размещенная в службе Windows. То, что я пытаюсь сделать, - вызвать службу Windows (WS), которая находится на клиентском ПК и WS, чтобы вызвать клиентскую DLL на том же клиентском компьютере. Я установил WS на каждом клиентском ПК и на сервере. Когда вы переходите на страницу ASP.NET на сервере, и я вызываю этот метод, он отлично работает, но клиентские ПК вместо вызова своих DLL из своего локального WS, они вызывают WS, который вызывается на сервере, - который не является желаемое поведение. Эта среда будет установлена ​​в локальной сети.WCF Вызов локальной службы Windows, а не сервер

Пример метода, который у меня есть, - это получить имя ПК, которое неправильно взамен получает имя сервера.

Это мой app.config файл:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <!-- This section is optional with the new configuration model 
      introduced in .NET Framework 4. --> 
     <service name="Service.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8000/ServiceModelSamples/service"/> 
      </baseAddresses> 
     </host> 
     <!-- this endpoint is exposed at the base address provided by host: http://localhost:8000/ServiceModelSamples/service --> 
     <endpoint address="" 
        binding="wsHttpBinding" 
        contract="Service.ICalculator" /> 
     <!-- the mex endpoint is exposed at http://localhost:8000/ServiceModelSamples/service/mex --> 
     <endpoint address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="CalculatorServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="False"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

Мой класс обслуживания:

Public Interface ICalculator 
    <OperationContract()> _ 
    Function GetPCname() As String 
     Sub OpenPort() 
    <OperationContract()> _ 
End Interface 

Public Class CalculatorService 
    Implements ICalculator 

    <DllImport("C:\App_32bit\test.dll", CharSet:=CharSet.Ansi)> _ 
    Private Shared Function DrvOpen(ByVal cha As String, ByRef ope As T_open, ByRef out As T_open_out) As Short 
    End Function 

    Public Function GetPCname() As String Implements ICalculator.GetPCname 
     Return Environment.MachineName 
    End Function 

    Public Sub OpenPort() Implements ICalculator.OpenPort 
    'some code. 
    End Function 
End Class 

Любые идеи, как управлять, чтобы назвать мою МЕСТНОГО службу вместо службы Windows сервера?

ответ

0

Вы должны вызывать метод на каждом сетевом компьютере с установленными и настроенными службами Windows, вызывая метод на вашем сервере, означает, что он будет выполняться только один раз и только на вашем сервере. Вы должны вызывать все методы на всех машинах, как:

192.168.1.1\MyWindowsService\Method1 
192.168.1.2\MyWindowsService\Method1 
... 
etc. 

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

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