- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个与这个类似的问题: Win32Exception @ ServiceHost.Open() for WCF service .
我有一台机器在下面的 ServiceHost.Open 调用上非常慢。每次打开服务都需要 7 秒左右的时间。这台机器是我的家庭机器,它不是域的一部分。
我可以在另一个框(我的工作框)上运行相同的代码,该框是域的一部分并且服务主机在第一次调用时大约 3-4 秒内打开,但如果我运行该程序将在大约 1 秒或更短的时间内再次打开服务主机。
我已经与 MS 支持人员合作解决了这个问题,我们生成了跟踪日志,它卡在其中的部分是出去并尝试连接到域,即使是在不属于域的机器上也是如此。它得到“指定的域不存在或无法联系”。跟踪日志中的异常,这就是所有时间都被耗尽的地方。
但真正奇怪的是,即使在我的工作机器上,如果我没有连接到域(比如如果我不在我的工作网络上并且只是在家里运行)我仍然不 获取延迟。
我使用 Windows 7 64 位重建了我的机器,并且出现了相同的行为(运行的是 XP SP3,当 Windows 7 似乎无法解决问题时我恢复了它)。
我只是想知道是否有人对导致这种情况的原因有任何想法。顺便说一句,如果我禁用“Microsoft 网络客户端”,打开 ServiceHost 的时间大约为 4 秒,但这仍然不如这台机器过去能够打开服务的速度快。不知何故,它认为它应该是域或其他东西的一部分。
static void RunServiceWithinEXE()
{
Uri baseAddress = new Uri("http://localhost:11111/Demo");
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
try
{
// Add a service endpoint
serviceHost.AddServiceEndpoint(
typeof(ICalculator),
new WSHttpBinding(),
"CalculatorService");
// Enable metadata exchange
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
serviceHost.Description.Behaviors.Add(smb);
serviceHost.Opening += new EventHandler(serviceHost_Opening);
serviceHost.Opened += new EventHandler(serviceHost_Opened);
serviceHost.Open();
Console.WriteLine("The service is ready.");
// Close the ServiceHostBase to shutdown the service.
serviceHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("An exception occured: {0}", ce.Message);
serviceHost.Abort();
}
}
static void serviceHost_Opened(object sender, EventArgs e)
{
TimeSpan timeToOpen = DateTime.Now - shOpening;
Console.WriteLine("Time To Open: :" + timeToOpen.Seconds);
}
static void serviceHost_Opening(object sender, EventArgs e)
{
shOpening = DateTime.Now;
}
这是我的 app.config,但我没有为其中的服务设置任何特殊的安全配置设置,只有一些用于启用 WCF 跟踪的诊断设置。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<diagnostics>
<messageLogging maxMessagesToLog="30000"
logEntireMessage="true"
logMessagesAtServiceLevel="false"
logMalformedMessages="true"
logMessagesAtTransportLevel="true">
<filters>
<clear/>
</filters>
</messageLogging>
</diagnostics>
</system.serviceModel>
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning, ActivityTracing" propagateActivity="true" >
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Warning">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\Temp\Server.svclog" />
</sharedListeners>
<trace autoflush="true" indentsize="4">
<listeners>
<remove name="Default" />
<add name="ScottsConsoleListener" type="System.Diagnostics.ConsoleTraceListener" />
<add name="ScottsTextListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\Temp\DebugLog.txt" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
另请注意,我的服务定义需要 SessionMode(见下文)。如果我去掉 SessionMode 要求,我就不会得到延迟。
using System;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace Microsoft.ServiceModel.Samples
{
// Define a service contract.
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples", SessionMode = SessionMode.Required)]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
[OperationContract]
string PrintName(string firstName, string lastName);
[OperationContract]
Point MakePoint(double x, double y);
}
}
最佳答案
好吧,我怀疑您使用的绑定(bind) (WsHttpBinding
) 默认使用 Windows 凭据验证其调用者,除非您明确告诉它不要这样做。
在您的服务托管代码中,您只是实例化一个默认的 WsHttpBinding
实例 - 在这种情况下,配置或代码中没有设置来更改默认的安全行为。
仅用于测试目的:尝试将您的服务托管代码更改为:
// Add a service endpoint
serviceHost.AddServiceEndpoint(
typeof(ICalculator),
new WSHttpBinding(SecurityMode.None), // pass in SecurityMode.None
"CalculatorService");
这将有效地取消所有安全设置,例如ServiceHost
甚至不应再尝试查找 Windows 域来对调用者进行身份验证。
这会改变您的任何观察结果吗?
关于WCF 缓慢的 ServiceHost.Open() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4739546/
我正在做以下事情 //Define the service host this._smeediPluginServiceHost = new ServiceHost(typeof(S
我正在创建一个 WCF 服务,昨天它似乎在 VS 测试客户端上运行良好,但今天它似乎在我尝试更改 web.config 文件后抛出此错误。 下面是代码和配置文件: using System; usin
我有一个名为 WcfService2 的服务(我知道的原始服务),它有一个带有公共(public)接口(interface)的 IService.cs 文件: namespace WcfService
我在服务应用程序中有一个 ServiceHost,它每 60 秒与 1700 个客户端通信。当我启动该服务时,它几乎立即攀升到大约 1500 个打开的句柄,然后在大约 5 分钟后继续增加另外 300
使用单个合约运行 ServiceHost 工作正常,如下所示: servicehost = new ServiceHost(typeof(MyService1)); servicehost.AddSe
我有一个 WCF 服务库和一个 Windows 服务作为主机。我想让 ServiceHost 从任何目录而不只是从当前目录加载 WCF 服务库(从该程序集获取服务类型)。 最佳答案 一种方法是配置 -
我的服务器中运行着一个 WCF 服务,还有几个客户端在根据自定义 UserNamePasswordValidator 对自己进行身份验证后使用该服务,就像 http://burcakcakiroglu
我们有一个 WCF SerivceHost(自托管),在 App.config 中配置了 XML。主机已经打开。 我们想在运行时(通过代码)更改服务绑定(bind)中的特定配置值。 不幸的是,我们目前
好吧,我花了一天的时间查看这个错误和所有的帖子,但我似乎仍然找不到哪里出错了。我可以与来自外部 Web 服务客户端的 Web 服务通信,但我无法从 VS 或 IIS 中浏览 .svc 文件。我正在发布
我正在创建一个带有端口 0 的 WCF ServiceHost 以获得动态分配的端口: ServiceHost host = new ServiceHost(typeof(MyClass), new
由于我目前正在学习使用 WCF 服务,所以我经常在 Internet 上遇到教程,其中提到在使用 WCF 服务时使用 ServiceHost。 这个 ServiceHost 到底是什么? 在我当前的项
我在学习 WCF 教程时遇到以下错误。 HTTP 无法注册 URL http://+:8000/ServiceModelSamples/Service/ .您的进程没有访问此命名空间的权限(有关详细信
我正在尝试在 Windows 2007 SP1 服务器上将 WCF ServiceHost 作为 NT 服务运行。 ServiceHost 负责托管单个服务端点:具有以下地址的 basicHttpBi
这是一个与这个类似的问题: Win32Exception @ ServiceHost.Open() for WCF service . 我有一台机器在下面的 ServiceHost.Open 调用上非
我正在考虑自行托管我的 WCF 服务,而不是使用 IIS。对我来说,一个大问题是我是否需要像 IIS 那样实例化多个服务主机,或者一个就足够了。 除了隔离的安全原因之外,多个服务主机是否有任何好处?
我只是在整理我的一些 WCF(自托管)代码,并意识到我的 ServiceHost 对象在最初设置后超出了范围,但我仍然可以连接到它。 public void StartMyService() {
我正在开发一个简单的 wcf 服务进行测试。当我使用本地 IIS 7.5 测试此服务时,它可以正常工作。但是当我将其托管在 Web IIS 中时,我收到此错误: The type 'WcfServic
我可以使用 ServiceHost.AddServiceEndpoint 添加端点。如何获取端点列表? 最佳答案 使用host.Description.Endpoints 关于.net - WCF:如
在 svc 文件中设置 Debug="true"是否会降低性能?它是否足够重要,足以保证在生产环境中将其设置为“false”? %@ ServiceHost Language="C#" **Debug
这里有一个新成员。很高兴看到这样一个整洁的社区。 经过一番研究,我决定在我的应用程序中使用 WCF 进行进程间通信,因此我使用了 NetNamedPipeBinding 绑定(bind)。 Servi
我是一名优秀的程序员,十分优秀!