WCF 服务(NetTcpBinding)+托管 WPF 应用程序
WCF Service(NetTcpBinding) + host on managed WPF application
我想创建一个带有 WCF 服务的 WPF 应用程序来侦听某个端口。我创建 C# CLass Library(UfebsSignServiceLibrary) 并添加到 WCF 服务中。在图书馆之后,我添加了接口和 class 实现者。
我创建了 WPF 应用程序并希望在其中托管我的 WCF 服务。我在我的 WPF 应用程序中添加了对 UfebsSignServiceLibrary 的引用,配置 app.config。 WPF 已启动,但当我尝试在我的 WCF 服务上添加服务引用时出现错误 - 元数据包含无法解析的引用。
我已经尝试启用 "httpGetEnabled"、"httpsGetEnabled" 并为 http 协议添加了 baseAddress ()。我阅读了很多关于同一问题的主题,但没有找到适合我情况的答案。
我的 Class 带有 WCF 服务代码的库:
namespace UfebsSignServiceLibrary
{
[ServiceContract]
public interface IUfebsSignService
{
[OperationContract]
byte[] SignData(byte[] data, string profileName);
}
namespace UfebsSignServiceLibrary
{
public class UfebsSignService : IUfebsSignService
{
public byte[] SignData(byte[] data, string profileName)
{
// Some Code
}
}
我的WPF APP代码:
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void Start_Click(object sender, RoutedEventArgs e)
{
using (host = new ServiceHost(typeof(UfebsSignService)))
{
host.Open();
}
Stop.IsEnabled = true;
Start.IsEnabled = false;
}
private void Stop_Click(object sender, RoutedEventArgs e)
{
host.Close();
Stop.IsEnabled = false;
Start.IsEnabled = true;
}
App.config 代码(wpf 应用程序):
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="mexBehavior">
<serviceMetadata /> <!--httpGetEnabled="false"-->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="mexBehavior" name="UfebsSignServiceLibrary.UfebsSignService">
<host>
<baseAddresses>
<!--<add baseAddress="http://localhost:8080/UfebsSignService" />-->
<add baseAddress="net.tcp://localhost:8585/UfebsSignService/" />
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" contract="UfebsSignServiceLibrary.IUfebsSignService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
The URI prefix is not recognized.
Metadata contains a reference that cannot be resolved: 'net.tcp://localhost:8585/UfebsSignService/'.
Could not connect to net.tcp://localhost:8585/UfebsSignService/. The connection attempt lasted for a time span of 00:00:02.0140574. TCP error code 10061
代码片段中存在一个小问题。当我们使用USING语句时,它会自动释放托管资源。请考虑使用以下代码启动服务主机。
host = new ServiceHost(service);
host.Open();
如果问题仍然存在,请随时告诉我。
我想创建一个带有 WCF 服务的 WPF 应用程序来侦听某个端口。我创建 C# CLass Library(UfebsSignServiceLibrary) 并添加到 WCF 服务中。在图书馆之后,我添加了接口和 class 实现者。 我创建了 WPF 应用程序并希望在其中托管我的 WCF 服务。我在我的 WPF 应用程序中添加了对 UfebsSignServiceLibrary 的引用,配置 app.config。 WPF 已启动,但当我尝试在我的 WCF 服务上添加服务引用时出现错误 - 元数据包含无法解析的引用。
我已经尝试启用 "httpGetEnabled"、"httpsGetEnabled" 并为 http 协议添加了 baseAddress ()。我阅读了很多关于同一问题的主题,但没有找到适合我情况的答案。
我的 Class 带有 WCF 服务代码的库:
namespace UfebsSignServiceLibrary
{
[ServiceContract]
public interface IUfebsSignService
{
[OperationContract]
byte[] SignData(byte[] data, string profileName);
}
namespace UfebsSignServiceLibrary
{
public class UfebsSignService : IUfebsSignService
{
public byte[] SignData(byte[] data, string profileName)
{
// Some Code
}
}
我的WPF APP代码:
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void Start_Click(object sender, RoutedEventArgs e)
{
using (host = new ServiceHost(typeof(UfebsSignService)))
{
host.Open();
}
Stop.IsEnabled = true;
Start.IsEnabled = false;
}
private void Stop_Click(object sender, RoutedEventArgs e)
{
host.Close();
Stop.IsEnabled = false;
Start.IsEnabled = true;
}
App.config 代码(wpf 应用程序):
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="mexBehavior">
<serviceMetadata /> <!--httpGetEnabled="false"-->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="mexBehavior" name="UfebsSignServiceLibrary.UfebsSignService">
<host>
<baseAddresses>
<!--<add baseAddress="http://localhost:8080/UfebsSignService" />-->
<add baseAddress="net.tcp://localhost:8585/UfebsSignService/" />
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" contract="UfebsSignServiceLibrary.IUfebsSignService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
The URI prefix is not recognized. Metadata contains a reference that cannot be resolved: 'net.tcp://localhost:8585/UfebsSignService/'. Could not connect to net.tcp://localhost:8585/UfebsSignService/. The connection attempt lasted for a time span of 00:00:02.0140574. TCP error code 10061
代码片段中存在一个小问题。当我们使用USING语句时,它会自动释放托管资源。请考虑使用以下代码启动服务主机。
host = new ServiceHost(service);
host.Open();
如果问题仍然存在,请随时告诉我。