在启动WCF客户端时“没有找到默认端点”

时间:2022-05-13 16:51:08

I have a Windows Service which represents the WCF-Host and a WPF-Client-Application wich represents the WCF-Client. The communication should be duplex so I went with WSDualHttpBinding. At first I install and start my Service which opens a WCF connection after that I start my WPF app and I get the following error (I translated it): No default endpoint was found to the contract \ " WCFCloudManagerFolderWatcherService.Interfaces.IFilesDuplex \ " in the service model client configuration section refers. This may be caused by: For the purposes of no configuration file was found or in the client element no endpoint element was found , which corresponded to this contract .

我有一个代表wcf主机的Windows服务和一个代表wcf客户端的wpf客户端应用程序。通信应该是双工的,所以我使用了WSDualHttpBinding。首先,我安装并启动了服务,该服务打开了WCF连接,然后我启动了WPF应用程序,我得到了以下错误(我翻译了它):没有找到合同\“wcfcloudmanagerfolderwatcherservices . interface”的默认端点。在“服务模型客户端配置”一节中引用“ifilesdouble \”。这可能是由于:出于没有找到配置文件的目的,或者在客户端元素中没有找到与此契约对应的端点元素。

Contracts: IFilesDuplex-Contract:

合同:IFilesDuplex-Contract:

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples", SessionMode = SessionMode.Required,
            CallbackContract = typeof(IFilesDuplexCallback))]
public interface IFilesDuplex
{
    [OperationContract(IsOneWay = true)]
    void Update();
}

IFilesDuplexCallback:

IFilesDuplexCallback:

interface IFilesDuplexCallback
{
    [OperationContract(IsOneWay = true)]
    void Equals(string[] result);
}

ClientSide CallbackHandler:

ClientSide CallbackHandler:

class CallbackHandler : IFilesDuplexCallback
{
    public event Action<string[]> ReceivedList = delegate { };

    public void Equals(string[] result)
    {
        this.ReceivedList(result);
    }
}

The Client itself:

客户端本身:

class FilesDuplexClient : DuplexClientBase<IFilesDuplex>, IFilesDuplex
{
    public FilesDuplexClient(InstanceContext callbackCntx)
        : base(callbackCntx)
    {            
    }

    public void Update()
    {
        base.Channel.Update();
    }
}

And the Code from the Main Window, where the error is thrown:

以及从主窗口中抛出错误的代码:

CallbackHandler ch = new CallbackHandler();
        ch.ReceivedList += ch_ReceivedList;

        // Construct InstanceContext to handle messages on callback interface
        InstanceContext instanceContext = new InstanceContext(ch);

        // Create a client
        FilesDuplexClient client = new FilesDuplexClient(instanceContext);
        client.Update();

Serverside (Windows Service) FileProtocoll-Class (Server code)

服务器端(Windows服务)文件原型类(服务器代码)

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class FileProtocoll : IFilesDuplex
{
    IFilesDuplexCallback Callback
    { get { return OperationContext.Current.GetCallbackChannel<IFilesDuplexCallback>(); } }

    void IFilesDuplex.Update()
    {
        //....
        Callback.Equals(null);// just a dummy
        //...
    }

}

Code in the OnStart-Method (in a Thread):

启动方法中的代码(在线程中):

// Step 1 Create a URI to serve as the base address.
        Uri baseAddress = new Uri("http://localhost:8899/CloudManager/CommunicationChannel1");

        // Step 2 Create a ServiceHost instance
        if (selfHost != null)
        {
            selfHost.Close();
        }

        selfHost = new ServiceHost(typeof(FileProtocoll), baseAddress);

        try
        {
            // Step 5 Start the service.
            selfHost.Open();



        }
        catch (CommunicationException ce)
        {
             selfHost.Abort();
        }

Code in the OnStop-Method (in a Thread):

OnStop-Method中的代码(在线程中):

if (selfHost != null)
        {
            if (selfHost.State != CommunicationState.Closed)
            { 
                selfHost.Close();
            }

            selfHost = null;
        }

App.config:

App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>     
    </startup>
  <system.serviceModel>
    <services >
      <service behaviorConfiguration="ServiceBehavior"
   name="WCFCloudManagerFolderWatcherService.Communication.FileProtocoll">
        <endpoint address="http://localhost:8899/CloudManager /CommunicationChannel1"
        binding="wsDualHttpBinding"     contract="WCFCloudManagerFolderWatcherService.Interfaces.IFilesDuplex">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex"
        binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true "/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

1 个解决方案

#1


0  

I finally got it. Had to make a few changes to my Client app.config and had to turn off security.

我终于明白了。必须对我的客户端app.config做一些更改,并且必须关闭安全性。

app.config(client):

app.config(客户端):

<!-- WCF Client information-->
<system.serviceModel>
<bindings>
  <wsDualHttpBinding>
    <binding name="WSDualHttpBinding_IFilesDuplex">
      <security mode="None"/>
    </binding>
  </wsDualHttpBinding>
</bindings>
<client>
  <endpoint
    address="http://localhost:8899/CloudManager/CommunicationChannel1"
    binding="wsDualHttpBinding"
    bindingConfiguration="WSDualHttpBinding_IFilesDuplex"
        contract="WCFCloudManagerFolderWatcherService.Interfaces.IFilesDuplex"
    name="WSDualHttpBinding_IFilesDuplex">
    <identity>
      <userPrincipalName value="localhost"/>
    </identity>
  </endpoint>
</client>

and in the app.config for the serverside I also hat to set

在serverside的app.config中,我还设置了

<security mode="None"/>

Now the connection works.

现在连接工作。

#1


0  

I finally got it. Had to make a few changes to my Client app.config and had to turn off security.

我终于明白了。必须对我的客户端app.config做一些更改,并且必须关闭安全性。

app.config(client):

app.config(客户端):

<!-- WCF Client information-->
<system.serviceModel>
<bindings>
  <wsDualHttpBinding>
    <binding name="WSDualHttpBinding_IFilesDuplex">
      <security mode="None"/>
    </binding>
  </wsDualHttpBinding>
</bindings>
<client>
  <endpoint
    address="http://localhost:8899/CloudManager/CommunicationChannel1"
    binding="wsDualHttpBinding"
    bindingConfiguration="WSDualHttpBinding_IFilesDuplex"
        contract="WCFCloudManagerFolderWatcherService.Interfaces.IFilesDuplex"
    name="WSDualHttpBinding_IFilesDuplex">
    <identity>
      <userPrincipalName value="localhost"/>
    </identity>
  </endpoint>
</client>

and in the app.config for the serverside I also hat to set

在serverside的app.config中,我还设置了

<security mode="None"/>

Now the connection works.

现在连接工作。