【问题标题】:Local service (The server has rejected the client credentials.)本地服务(服务器已拒绝客户端凭据。)
【发布时间】:2011-12-14 03:20:03
【问题描述】:

我有一个简单的设置,一个在机器上运行的 WPF 应用程序和一个托管在同一台机器上的 Windows 服务中的 WCF 服务(总是在同一台机器上)。当我在一台计算机上调试时,我可以轻松访问本地 WCF 服务。当我在另一台机器上运行它时,我得到一个错误:

“服务器已拒绝客户端凭据。”

我的一些观察是,在我的本地机器上我没有域/网络。它是我的家用机器。在客户站点时,它不会运行,并给出上述错误。有人知道为什么这些计算机上的情况不同吗?

/布莱恩

编辑:

合同:

[ServiceContract(Namespace = "http://www.greenweb.dk/motiondetection")]
    public interface IMotionDetection
    {
        [OperationContract]
        bool GetMotionDetected();
    }

应用程序配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings />
    <client />
    <services>
      <service name="GreenWebPlayerMotionDetectionService.MotionDetected" behaviorConfiguration="MotionDetectionBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="net.pipe://localhost/GreenWebMotionDetectionService/"/>
          </baseAddresses>
        </host>
        <endpoint address="" contract="GreenWebPlayerMotionDetectionService.IMotionDetection" binding="netNamedPipeBinding"/>
        <endpoint address="mex" contract="IMetadataExchange" binding="mexNamedPipeBinding"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MotionDetectionBehavior">
          <serviceMetadata httpGetEnabled="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel> 
</configuration>

编辑 2 安全不会是问题,不需要安全,运行它的计算机已经与其他一切隔离。

编辑 3 在客户端和服务器上都设置了&lt;security mode="None"&gt;&lt;/security&gt;,现在我得到这个错误:“从管道读取错误:无法识别的错误109(0x6)”

我不知道这是否是朝着正确方向迈出的一步

【问题讨论】:

  • 你没有给我们太多继续......你使用什么绑定?什么安全设置?服务是什么样的?
  • 更多信息请查看编辑详情
  • 布赖恩,你有没有得到这个工作?我现在遇到了完全相同的问题。

标签: wcf


【解决方案1】:

问题似乎是安全性。而不是 None 我将客户端和服务器设置为“EncryptAndSign”。然而,当主机是 Windows 服务时,这还不够。我放弃了 Windows 服务方法,而是将其托管在 Windows 应用程序中 - 然后它立即工作......去看看!

【讨论】:

  • 根据我的经验,WCF 服务的宿主会影响其安全设置。如果您将主机从 Console 应用程序更改为 WPF 应用程序,有时您需要修改 WCF 服务的安全设置。
【解决方案2】:

问题在于

netNamedPipeBinding

.此绑定用于在机器内部进行通信。请检查链接。它的机器上。

如果您想在使用 .net 的两台机器之间进行通信,请选择 net.tcp。如果您想在 .Net 和 Java 应用程序之间进行通信,请使用 basicHttpBinding。

http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx

【讨论】:

  • 问题说明这将在同一台机器上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
相关资源
最近更新 更多