我提前道歉,因为太过模糊,如果你需要任何精确度,我会尽力给它。
我编译了2个不同的WCF“代码项目”示例应用程序,无论我发布的是什么,我都会遇到以下异常,所以我猜我的机器上有错误的配置:
修改
我在另一台机器上试过(相同操作系统,赢得7 64)并且工作正常
我无法弄清楚我的计算机上哪些配置有误或缺失。
{"Operation is not supported on this platform."}
at System.Net.HttpListener..ctor()
at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
at System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener)
at System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback)
at System.ServiceModel.Channels.HttpChannelListener.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at WCFService.MainForm.startWCFServer() in D:\xxx\MainForm.cs:line 77
以下是代码。我猜没有什么不寻常的基本WCF东西。
private ServiceHost host = null;
public void startWCFServer()
{
// Create the url that is needed to specify where the service should be tarted
urlService = "net.tcp://" + "127.0.0.1" + ":8000/MyService";
// Instruct the ServiceHost that the type that is used is a ServiceLibrary.service1
host = new ServiceHost(typeof(ServiceLibrary.service1));
host.Opening += new EventHandler(host_Opening);
host.Opened += new EventHandler(host_Opened);
host.Closing += new EventHandler(host_Closing);
host.Closed += new EventHandler(host_Closed);
// The binding is where we can choose what transport layer we want to use. HTTP, TCP ect.
NetTcpBinding tcpBinding = new NetTcpBinding();
tcpBinding.TransactionFlow = false;
tcpBinding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
tcpBinding.Security.Mode = SecurityMode.None; // <- Very crucial
// Add endpoint
host.AddServiceEndpoint(typeof(ServiceLibrary.IService1), tcpBinding, urlService);
// A channel to describe the service. Used with the proxy scvutil.exe tool
ServiceMetadataBehavior metadataBehavior;
metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (metadataBehavior == null)
{
// This is how I create the proxy object that is generated via the svcutil.exe tool
metadataBehavior = new ServiceMetadataBehavior();
//metadataBehavior.HttpGetUrl = new Uri("http://" + _ipAddress.ToString() + ":8001/MyService");
metadataBehavior.HttpGetUrl = new Uri("http://" + "127.0.0.1" + ":8001/MyService");
metadataBehavior.HttpGetEnabled = true;
metadataBehavior.ToString();
host.Description.Behaviors.Add(metadataBehavior);
urlMeta = metadataBehavior.HttpGetUrl.ToString();
}
host.Open(); // <---- EXCEPTION BLOWS HERE
}
DETAILS:
演示应用是here和here,并删除了上述相同的例外
它可能是一个UAC问题,如here所述,但这并不能解决我的问题
操作系统是Windows 7 x64
提前致谢。
答案 0 :(得分:2)
当您无权在给定地址创建服务主机时,会收到此消息。在您的情况下,您将使用NetTcpBinding获取此信息。以下是一些可能的解决方案 - 您只需要贯穿它们。
答案 1 :(得分:0)
我不知道到底发生了什么,为什么确切地说, 但评论以下行并且不添加metadataBehavior host.Description.Behaviors修复了prob:
host.Description.Behaviors.Add(metadataBehavior);
我真的不需要这个功能所以可以挤压它,但我仍然想知道为什么这会导致异常...(特别是那是在我的合作伙伴的工作站上工作,所以我相信它必须做与“某些地方设置”)
在其他项目上评论完全相同的那条线也会使它们也起作用,所以毫无疑问会留下。
答案 2 :(得分:0)
根据这个: http://social.msdn.microsoft.com/forums/en-US/wcf/thread/b67d03d9-e2e6-40e6-aa44-2af6ce5a8a38/ 问题是元数据绑定不是http,因此防火墙阻止它。
答案 3 :(得分:-1)
1-&gt;打开SQL Server
2-&gt;右键单击数据库并选择属性
3-&gt;单击选项(左侧面板)更改为数据库集合选择Latin1_General_CI_AI
任务已完成。