从 Silverlight 4 调用 HTTPS-WCF 服务时出现安全错误

2023-11-30

我创建了一个简单的 WCF 服务,我希望可以通过 https 访问它。 WCF 服务使用 UserNamePasswordValidator、customBinding 和 UserNameOverTransport 作为身份验证模式。我在 IIS7.5 中运行它,我在其中创建了自签名服务器证书。

我尝试使用 Silverlight 4 应用程序连接到该服务。我在 Silverlight 4 应用程序中创建了一个服务引用,VS 2010 会自动创建所需的代码(因此显然它能够连接到该服务并获取信息)。

当我调用 WCF 时,我收到一个 SecurityException,但没有任何有关原因的信息。

我让提琴手跑来看看发生了什么。

GET https://my.server:8099/clientaccesspolicy.xml404 未找到(文本/html)
GET https://my.server:8099/crossdomain.xml200 确定(文本/xml)

因此,crossdomain.xml 的 GET 似乎是对服务器的最后一次调用。

crossdomain.xml 如下所示:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>  
  <allow-access-from domain="*" />  
  <allow-http-request-headers-from domain="*" headers="*" />
</cross-domain-policy>

当在客户端上调用 base.EndInvoke(...) 且 ExceptionMessage 如下时,会发生异常:

{System.Security.SecurityException ---> System.Security.SecurityException: Sicherheitsfehler bei System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 位于 System.Net.Browser.BrowserHttpWebRequest.c_DisplayClass5.b_4(对象发送状态) 位于 System.Net.Browser.AsyncHelper.c_显示类2.b_0(对象发送状态) --- 实习结束 --- bei System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,对象状态) 是 System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 是 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult 结果)}

这是我的用户名密码验证器。请注意,出于调试原因,其中包括一个记录器。奇怪的是,记录器从不写任何东西,所以看起来验证函数甚至没有被调用。

namespace ServiceConfiguratorDataSource
{
  public class UserCredentialsValidator : UserNamePasswordValidator
  {
    public override void Validate(string userName, string password)
    {
      if (userName != "xyz" || password != "xyz")
      {
        logging.Logger.instance.StatusRoutine("LogOn Error: " + userName);
        throw new FaultException("Credentials are invalid");
      }
      else
      {
        logging.Logger.instance.StatusRoutine("LogOn Success: " + userName);
      }
    }
  }
}

这是我的 WCF 服务的 Web.config:

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <system.web>
      <compilation debug="true" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
      <services>
        <service name="ServiceConfiguratorDataSource.Service" behaviorConfiguration="ServiceConfiguratorDataSourceBehaviour">
          <endpoint address="" binding="customBinding" bindingConfiguration="ServiceConfiguratorCustomBinding" contract="ServiceConfiguratorDataSource.IService" />
        </service>
      </services>
      <bindings>
        <customBinding>
          <binding name="ServiceConfiguratorCustomBinding">
            <security authenticationMode="UserNameOverTransport"></security>
            <binaryMessageEncoding></binaryMessageEncoding>
            <httpsTransport/>
          </binding>
        </customBinding>
      </bindings>
      <behaviors>
        <serviceBehaviors>
          <behavior name="ServiceConfiguratorDataSourceBehaviour">
            <serviceMetadata httpsGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="true"/>
            <serviceCredentials>
              <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ServiceConfiguratorDataSource.UserCredentialsValidator,ServiceConfiguratorDataSource" />
            </serviceCredentials>
          </behavior>
        </serviceBehaviors>
      </behaviors>
      <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>
  </configuration>

这里是 ServiceReferences.ClientConfig

<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="CustomBinding_IService">
          <security authenticationMode="UserNameOverTransport" includeTimestamp="true">
            <secureConversationBootstrap />
          </security>
          <binaryMessageEncoding />
          <httpsTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="https://my.server:8099/ServiceConfiguratorDataSource/Service.svc" binding="customBinding" bindingConfiguration="CustomBinding_IService" contract="WCFDataProvider.IService" name="CustomBinding_IService" />
    </client>
  </system.serviceModel>
</configuration>

我不知道问题的原因可能是什么。

提前致谢,
Frank


您的 clientaccesspolicy.xml 允许 https 吗?
Here是例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Silverlight 4 调用 HTTPS-WCF 服务时出现安全错误 的相关文章

随机推荐

  • 通过javascript检测ipad/iphone webview

    有没有办法用 JavaScript 检测网站是否在 iPad 的 Safari 内或应用程序 WebView 内运行 这使用了以下组合window navigator userAgent and window navigator stand
  • 数字签名 亚马逊应用商店

    我在亚马逊应用商店中读到了这样的内容 这是什么意思 我是否必须明确地做某事 或者亚马逊自己签名 我不清楚 你能告诉我吗 我可以为我的应用程序应用签名吗 所有应用程序都必须使用证书进行数字签名 应用于您的应用程序的默认签名是亚马逊提供的证书
  • 在 Web 配置中添加 serverRuntime 标记会导致 500.19 错误

    我刚刚从另一台笔记本电脑上的 TFS 下载了 asp net 项目 但无法运行它 我已经缩小了问题范围 这与我的 webconfig 设置有关 设置是
  • 如何以不区分大小写的方式从列表中删除单词?

    我有一个名为words包含可能为大写或小写或它们的某种组合的单词 然后我有另一个列表称为stopwords其中仅包含小写单词 现在我想浏览一下其中的每个单词stopwords并从中删除该单词的所有实例words以不区分大小写的方式 但我不知
  • PHP 日期“最后一个工作日”输出错误的月份

    我正在尝试获取last weekday使用下面的代码显示当前月份的数据 我期望它的行为就像所有其他运算符一样last friday of并输出本月最后一个工作日 而是输出上个月的最后一个工作日 我知道我可以通过使用来纠正这个问题modify
  • 使用线程执行shell命令c++

    是否可以通过创建线程来执行 shell 命令 即不使用 popen system 或任何 fork exec 变体 为什么或者为什么不 为了提供更多上下文 我正在运行一个多线程程序 其中一个线程需要执行 shell 脚本 目前它使用 pop
  • CDataColumn 的“值”内的条件语句

    有谁知道如何在 CGridView 列字段中显示条件值 我在数据库中有一个性别 M 或 F 的条目 在 CGridView 中 但是我想分别显示 男 和 女 而不是 M 或 F 欢迎任何想法 我发现虽然不允许使用完整的 if else 语法
  • 在 MVC3 中将 ListBox 与模型绑定

    我的模型是 public class SiteConfig public SiteConfig public int IdSiteConfig get set public string Name get set public byte S
  • 在审核表单中添加自定义字段

    我期待在审核表单中创建自定义字段 电子邮件 ID 和一个下拉列表 我已经尝试过这个 但没有保存数据 仅保存字段 应用程序 代码 核心 法师 评论 模型 Mysql4 Review php protected function afterSa
  • 如何使用与用户定义函数同名的 MATLAB 工具箱函数

    我遇到了问题findpeaks函数 该函数位于信号处理工具箱中 并且该程序还有它的另一个版本 用户定义函数 我需要调用信号处理工具箱中的 on 而不是用户定义的函数 而且由于多种原因我无法重命名用户定义的函数 谁能帮我调用工具箱函数 MAT
  • 解析正数和负数的字符串,Javascript

    所以我正在研究 d3 中制作的标签云示例 http www jasondavies com wordcloud http 3A 2F 2Fsearch twitter com 2Fsearch json 3Frpp 3D100 26q 3D
  • 使用 jQuery 动态创建链接

    我正在尝试使用 jQuery 在 blockquote 元素中创建一个链接 我现在正处于这个阶段 var pullQuote span pull quote each function var this this hrefLink http
  • 如何找到 Redshift 中访问次数最多的表?

    我们正在将实时数据传输到 Redshift 瓶颈是没有可以并发运行的表加载 目前 我们每 15 分钟运行超过 1000 个负载 但我们希望根据用户使用这些表的频率来减少这个数字 请建议我们如何在 Redshift 中获取此信息 This v
  • 获取奇数长度回文

    我试图找到最长的奇数长度回文 但我编写的代码没有给我完整的回文 只是其中的一部分 任何帮助都会很棒 def get odd palindrome at s index str int gt str gt get odd palindrome
  • 使用 firestore 安全规则中的替换功能

    我正在努力应对 Firestore 安全规则 我想检查需要替换功能的值 即电子邮件地址 我可以在一般安全文档中找到一些文档 但这似乎不适用于 Firestore 例如这有效 allow write if resource data memb
  • 如何获取/跟踪 ASP.NET 传出响应文本

    我的服务器似乎有时会向网络客户端返回错误的 html 我在 VS 2012 中使用 asp net 4 在 IIS Express 上进行调试 为了调试这个问题 我想跟踪asp net发送的html in the Global asax P
  • 如何从回历日期转换为公历日期,反之亦然

    我正在寻找一种方法来计算例如从现在到特定日期有多少天 并且我可以用它来确定我是否处于特定时间段 例如 Muharram 5 天 我已经找了 10 多个小时了 我发现的最好的东西是 HijrahDate 库 java time chrono
  • 更新 conda 后如何从终端提示符中删除 (base)

    更新 miniconda3 后 每当我打开终端时 它都会在我的用户名和主机前面显示 base 在这个回答帖子里https askubuntu com a 1113206 315699建议使用 conda config set changep
  • 在 Python 中格式化驱动器

    我正在尝试制作一个 Python 3 3 程序来格式化 Windows 中的驱动器 例如 SD 卡或 USB 记忆棒 我在这里尝试了代码 http bytes com topic python answers 537724 formatti
  • 从 Silverlight 4 调用 HTTPS-WCF 服务时出现安全错误

    我创建了一个简单的 WCF 服务 我希望可以通过 https 访问它 WCF 服务使用 UserNamePasswordValidator customBinding 和 UserNameOverTransport 作为身份验证模式 我在