相关疑难解决方法(0)

WCF over SSL - 404错误

好吧,我必须在这里遗漏一些完全简单的东西,因为我已经在谷歌上搜索了几天,在那里看了几十个答案,而且在这里,我无论如何都无法实现这一点.通过普通HTTP调用时,该服务工作正常.

这是我们的设置......我们有一个域名,http://www.mydomain.com.我们在该域上安装了SSL证书,就像我们保护电子商务网站一样.一切正常,我可以去http s://www.mydomain.com,它的工作正常.我在Windows Server 2003 R2上运行VS2008,.NET 3.5站点.

现在,我向我的站点添加了启用Silverlight的WCF服务,我希望通过SSL进行通信.如果我浏览到http s://www.mydomain.com/myservice.svc,它会向我显示WSDL描述性的" 您已创建服务 "页面,其中显示了使用

svcutil.exe https:// ... 
Run Code Online (Sandbox Code Playgroud)

编辑:我意识到在wsdl文件中为svcutil显示的url实际上是指向Web服务器的物理盒名称,而不是正确的域.所以我完成了这篇博客文章中显示的步骤,使用adsutil脚本更新IIS中网站的SecureBinding.现在wsdl文件显示正确的SSL地址,但我仍然得到相同的错误.

现在我去试图挂钩我的Silverlight应用程序,它不起作用,在异步调用的结果中返回一个异常,说" 远程服务器返回错误:NotFound.我的一些博客阅读谈到通过创建测试Windows应用程序将其缩小到Silverlight问题,并试图从中引用它.好吧,我做到了,甚至在试图通过SSL访问服务的常规Windows应用程序中我得到一个例外说明:

System.ServiceModel.EndpointNotFoundException: 
There was no endpoint listening at https://www.mydomain.com/mysubdir/myservice.svc that could accept the message. 
This is often caused by an incorrect address or SOAP action. 
See InnerException, if present, for more details. ---> 
System.Net.WebException: The remote server returned an error: (404) Not Found.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
Run Code Online (Sandbox Code Playgroud)

尽管我使用HTTPS方案明确地将服务引用添加到Windows应用程序,但它正确地获取了所有方法,并在编辑器中的Intellisense中显示它们.

请注意,这是一项不需要在用户身上显式登录的服务.我将在我的SOAP信封中发送自定义标头,以验证请求是否来自我们的应用程序,我只想让掠夺者嗅探线并挑出自定义标头.

现在到代码,我必须有一些愚蠢的小设置错误,因为从我读过的所有内容,这应该是一个相当简单的练习.

首先,我的服务的代码隐藏类使用以下属性进行修饰:

<ServiceBehavior(AddressFilterMode:=AddressFilterMode.Any)> 
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Run Code Online (Sandbox Code Playgroud)

我在服务器上的web.config的ServiceModel部分如下所示:

<system.serviceModel> …
Run Code Online (Sandbox Code Playgroud)

ssl https wcf wcf-binding

38
推荐指数
5
解决办法
4万
查看次数

使用Silverlight/IIS进行双工轮询的可扩展性

我一直在使用Silverlight,Web服务和轮询构建客户端/服务器应用程序.当我第一次研究这个主题时,显然我错过了整个双工通信的事情.无论如何,我在这个主题上看到的MSDN文章很有希望.

在研究可扩展性时,似乎对该主题存在冲突的意见.

silverlight.net/forums/t/89970.aspx - 此线程似乎表明双工轮询仅支持服务器端的有限数量的并发客户.

dotnetaddict.dotnetdevelopersjournal.com/sl_polling_duplex.htm - 这个博客条目出现在多个地方,所以它混淆了水域.

silverlight.net/forums/t/108396.aspx - 这个帖子表明我并不是唯一有这种担忧的人,但是没有答案.

silverlight.net/forums/t/32858.aspx - 尽管所有的坏消息,这个线程似乎有一个官方的回应说10个并发连接是每台机器.

简而言之,有没有人有事实/基准?

谢谢 :)

c# silverlight wcf web-services

9
推荐指数
2
解决办法
2234
查看次数

使用WCF PollingDuplex和Silverlight客户端时出现MaxSessionsPerAddress问题

WCF跟踪日志显示许多"The server has hit a PollingDuplex throttle, MaxSessionsPerAddress, and cannot accept another session from this client. An http error was returned"错误.

找不到有关MaxSessionsPerAddress设置的足够详细信息,只是发现这篇帖子MaxSessionsPerAddress总是说是10不能改变的.

只是在想可能是这个问题涉及到我的客户端代理,在这样的问题,一些超时结果实现它们共同容错逻辑:在通道故障WCF客户端代理的情况下关闭一个通道(关闭(),然后Aboort()在尝试/捕获),然后尝试重新连接每5秒,N次重试.也许客户端甚至在10次重试之后仍然无法连接在服务上创建了10个会话,因此所有下一次重试都被拒绝了?

一般信息:

  • PollingDuplex连接
  • 无法重现此问题,因为它在实时环境中观察过一次,然后关闭以不影响用户
  • IIS HTTPERR日志具有多个Connection_Abandoned,Connection_Dropped条目,用于失败的服务

WCF客户端:

  • Silverlight4
  • ClientPollTimeout = 5分钟
  • InactivityTimeout = 24h,SendTimeout = 30min,CloseTimeout = 3min
  • ReceiveTimeout = 24h,OpenTimeout = 3min

WCF服务器:

  • IIS托管
  • InstanceContextMode = PerSession
  • ConcurrencyMode = Multiple
  • maxConcurrentCalls,maxConcurrentSessions,maxConcurrentInstances设置为500
  • HttpBinding,httpTransport,PollingDuplexBindingElement,DuplexChannelFactory
  • sendTimeout ="00:30:00",receiveTimeout ="24:00:00",openTimeout ="00:10:00",closeTimeout ="00:10:00"
  • maxOutputDelay ="00:00:01",inactivityTimeout ="24:00:00",serverPollTimeout ="00:02:00"
  • maxReceivedMessageSize ="1073741824",maxBufferSize ="1073741824",MaxBufferPoolSize ="2147483647"

任何帮助非常感谢!

c# silverlight wcf .net-4.0 polling

8
推荐指数
1
解决办法
624
查看次数

为PerSession WCF服务调用两次的静态构造函数

不能udnerstand为什么PerSession/ WCF服务的类型构造函数调用两次.ConcurrencyModeMultiple.只需启动五个同时执行相同WCF服务方法调用的客户端,在日志中我看到static构造函数被调用两次,第一次和第二次使用另一个后第二次调用3秒ProcessId/ThreadId.在构造函数本身和WCF跟踪日志中都没有例外.每个日志的构造函数执行时间约为10毫秒.这导致所有静态字段不在假设的所有服务实例之间共享,并且在5个客户端连接的情况下,我有5个服务和两个不同的静态上下文,因此所有服务都没有反映onse静态字段的变化.

由于我依赖于在多个服务实例之间共享的一些静态缓存,因此这个问题混淆了许多事情.

服务托管在IIS.没有IIS重新启动,AppPool会在此时间间隔内重复使用.

[AspNetCompatibilityRequirements(RequirementsMode =
  AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(
  InstanceContextMode = InstanceContextMode.PerSession, 
  IncludeExceptionDetailInFaults = true, 
  ConcurrencyMode = ConcurrencyMode.Multiple)]
public class WcfService
{ 
    private static readonly ILog logger;
    private static volatile bool typeInitialized;

    static WcfService()
    {
        try
        {
            // Here is typeInitialized is false in both calls
            logger = LogManager.GetLogger("LogName");

            logger.InfoFormat("[PID:{0}] [THID:{1}] BEGIN Static constructor",
               Process.GetCurrentProcess().Id,
               Thread.CurrentThread.ManagedThreadId);
        }
        catch (Exception exception)
        {
           logger.Error("error on type construction stage", exception);
        }
        finally …
Run Code Online (Sandbox Code Playgroud)

c# silverlight wcf multithreading .net-4.0

7
推荐指数
1
解决办法
1582
查看次数