WCF 调用本地 Windows 服务,而不是服务器

本文关键字:服务器 服务 调用 Windows WCF | 更新日期: 2023-09-27 18:34:55

我有一个在Windows服务中托管的WCF服务。我正在尝试做的是调用位于客户端PC上的Windows服务(WS(和WS以调用同一客户端计算机上的客户端DLL。我已经在每台客户端PC和服务器上安装了WS。当导航到服务器上的 ASP.NET 页面并且我调用该方法时,它工作正常,但客户端 PC 不是从其本地 WS 调用其 DLL,而是调用在服务器上调用的 WS - 这不是所需的行为。此环境将安装在 LAN 上。

有一个示例方法是获取PC名称,作为回报,我错误地获得了服务器的名称。

这是我的应用程序.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服务?

WCF 调用本地 Windows 服务,而不是服务器

您应该在安装了和配置Windows服务的每台网络PC上调用方法,在服务器上调用方法意味着它只会在您的服务器上执行一次。您需要在所有计算机上调用所有方法,例如:

192.168.1.1'MyWindowsService'Method1
192.168.1.2'MyWindowsService'Method1
...
etc.

我建议创建不同的 Windows 服务,该服务只能在服务器上运行并在您的 lan 机器上调用方法。