Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >WCF与HTTPS的结合

WCF与HTTPS的结合
EN

Stack Overflow用户
提问于 2013-01-30 10:50:18
回答 4查看 40.3K关注 0票数 19

我知道有很多关于这方面的帖子,我已经浏览过所有这些文章,这些文章都是我搜索到的,并且实现了所有提到的内容。我有一个WCF web服务,它可以在我的本地系统上使用HTTP,它可以在HTTP上的服务器上工作。但是客户端需要通过HTTPS来实现这一点。在这个网站和其他网站上发布的文章告诉我,这并不像它应该的那样直接,因为在此之前,ASMX web服务“刚刚工作”,不需要复杂的配置。

我的当前配置出现了以下错误:

找不到与绑定WSHttpBinding的端点的方案https匹配的基址。注册的基本地址计划是http。

下面是我的代码,在尝试了几天来将其配置为无效之后,我的代码就这样出现了:

代码语言:javascript
运行
AI代码解释
复制
<system.serviceModel>

    <!--     -->
    <serviceHostingEnvironment  aspNetCompatibilityEnabled="true" >
        <baseAddressPrefixFilters>
            <add prefix="https://mysite.com"/>
            <add prefix="http://mysite.com"/>
        </baseAddressPrefixFilters>
    </serviceHostingEnvironment>

    <!-- Set up Custom Behaviors -->    
    <behaviors>

        <endpointBehaviors>
        </endpointBehaviors>

        <serviceBehaviors>
            <behavior name="WebPostService.WebPostServiceBehavior">
                <serviceMetadata httpsGetEnabled="true" httpsGetUrl="WebPostServices.svc/mex"  /> 
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>

    </behaviors>

    <!-- Set up the binding configuration  -->
    <bindings>

        <wsHttpBinding>
            <binding    name="SOAPBinding" 
            >

                <security mode="Transport">
                </security>
            </binding>
        </wsHttpBinding>

    </bindings>

    <services>

        <service    
                    behaviorConfiguration="WebPostService.WebPostServiceBehavior"
                    name="WebPostService.WebPostService"
        >

    <host>
      <baseAddresses>
        <add baseAddress="https://mysite.com/Services/WebPostService.svc"/>
      </baseAddresses>
    </host>
            <endpoint   address="" 
                        binding="wsHttpBinding" 
                        bindingConfiguration="SOAPBinding"
                        contract="WebPostService.IWebPostService"
            >
                <identity>
                    <dns value="mysite.com" />
                </identity>
            </endpoint>

            <endpoint   
                        address="mex" 
                        binding="mexHttpsBinding" 
                        contract="IMetadataExchange" 
            >
            </endpoint>

        </service>

    </services>

</system.serviceModel>

我做错了什么,我怎样才能让它在HTTPS上工作呢?我很沮丧,因为这并不像应该的那样简单。在MSDN工作的几个月里,我一直沉浸在WCF文档中,并且对服务、端点和绑定有很好的掌握

更新:我仍然在处理这个问题,当我试图为mex地址放置完整的URL时,我犯了一个奇怪的错误。我改了这个:

代码语言:javascript
运行
AI代码解释
复制
address="https://prcwebs.com/Services/WebPostService.svc/mex" 

得到了错误:

此服务的安全设置需要Windows身份验证,但对承载此服务的IIS应用程序不启用。

我没有尝试使用Windows身份验证,安全设置没有更改,并且仍然设置为

Could not find a base address that matches scheme https for the endpoint with binding WebHttpBinding. Registered base address schemes are [http] -是没有帮助的,没有提到会帮助Could not find a base address that matches scheme http for the endpoint with binding WSHttpBinding -我使用传输安全,这不适用。尝试换到不同的安全模式,仍然无法使站点工作。

EN

回答 4

Stack Overflow用户

发布于 2013-01-30 12:32:06

multipleSiteBindingsEnabled="true"添加到serviceHostingEnvironment并更新安全性以禁用客户端凭据:

代码语言:javascript
运行
AI代码解释
复制
<security mode="Transport">
    <transport clientCredentialType="None"></transport>
</security>

编辑我在windows 2003下的最后一个工作版本是使用以下配置。

代码语言:javascript
运行
AI代码解释
复制
<system.serviceModel>
    <serviceHostingEnvironment  aspNetCompatibilityEnabled="false" />

    <!-- Set up Custom Behaviors -->    
    <behaviors>
        <endpointBehaviors>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="WebPostService.WebPostServiceBehavior">
                <serviceMetadata httpsGetEnabled="true" httpsGetUrl="WebPostServices.svc/mex"  /> 
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>

    <!-- Set up the binding configuration  -->
    <bindings>
        <wsHttpBinding>
            <binding name="SOAPBinding">
                <security mode="Transport">
                  <transport clientCredentialType="None"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>

    <services>
        <service behaviorConfiguration="WebPostService.WebPostServiceBehavior"
                 name="WcfService2.Service1">

            <host>
                <baseAddresses>
                    <add baseAddress="https://localhost/Service/Service1.svc"/>
                </baseAddresses>
            </host>
            <endpoint address="" 
                      binding="wsHttpBinding" 
                      bindingConfiguration="SOAPBinding"
                      contract="WcfService2.IService1">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>

            <endpoint address="mex" 
                      binding="mexHttpsBinding" 
                      contract="IMetadataExchange">
            </endpoint>
        </service>
    </services>
</system.serviceModel>

您可以使用https访问网站,所以我想安装的证书部分是正确的。如果你有什么想和我比较的话,告诉我。

票数 4
EN

Stack Overflow用户

发布于 2013-02-01 08:48:02

您对HTTPS使用了错误的绑定。

有两个独立的绑定类。wsHttpBinding和wsHttpsBinding注意到了s,您需要在绑定下为HTTPS添加一个wsHttpsBinding,并且需要一个新的端点来进行绑定。

另外,您所看到的特殊错误--通常情况下,我将查看IIS是否从该位置为https设置过。

  • 打开IIS管理器
  • 开放场地
  • 右键单击默认网站。
  • 编辑绑定
  • 确保有https和http的条目。

  • 打开IIS管理器
  • 找到你的应用程序(我认为它将是默认的网站)。
  • 右击
  • 管理网站/应用程序
  • 高级设置
  • 启用协议
  • http,https
票数 3
EN

Stack Overflow用户

发布于 2013-02-08 01:19:36

我用了这个,它对我有用,也许它能帮到你

为了在WCF WsHttp绑定上启用Https,应该在web.config文件中更改一些简单的步骤。

这些步骤是:

在服务的web.config文件中启用传输级安全性:

在此步骤中,需要将安全模式从“无”更改为“传输”。下面的代码显示了如何做到这一点:

代码语言:javascript
运行
AI代码解释
复制
<bindings>
    <wsHttpBinding>
        <binding name="TransportSecurity">
            <security mode="Transport">
                <transport clientCredentialType="None"/>
            </security>
        </binding>
    </wsHttpBinding>
</bindings>

绑定并指定HTTPS配置

现在,您需要将绑定、预览步骤与终结点关联起来。使用bindingConfiguration标记指定绑定名称。您还需要指定承载服务的地址。下面的代码显示了如何做到这一点。

代码语言:javascript
运行
AI代码解释
复制
<service name="WCFWSHttps.Service1" behaviorConfiguration="WCFWSHttps.Service1Behavior">
<!-- Service Endpoints -->
    <endpoint address=https://localhost/WCFWSHttps/Service1.svc binding="wsHttpBinding"  bindingConfiguration="TransportSecurity" contract="WCFWSHttps.IService1"/>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>

。您还需要将httpGetEnabled更改为serviceMetaData中的httpsGetEnabled。下面的代码显示了如何做到这一点:

代码语言:javascript
运行
AI代码解释
复制
<serviceMetadata httpsGetEnabled="true"/> 

希望它能帮上忙

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14611514

复制
相关文章
【Android Gradle 插件】自定义 Gradle 插件模块 ④ ( META-INF 中声明自定义插件的核心类 | 在应用中依赖本地 Maven 仓库中的自定义 Gradle 插件 )
参考 Android Gradle 插件内容 , 将 Android Studio 的 Project 面板中的 External Libraries 展开 ,
韩曙亮
2023/03/30
1.6K0
【Android Gradle 插件】自定义 Gradle 插件模块 ④ ( META-INF 中声明自定义插件的核心类 | 在应用中依赖本地 Maven 仓库中的自定义 Gradle 插件 )
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )
在 Android Studio 工程的根目录的 buildSrc 模块下的 src/main/groovy 代码 , 自动引入了 Groovy , Gradle , Java 依赖库 , 可以直接调用上述 API ;
韩曙亮
2023/03/30
1K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )
【Android Gradle 插件】Gradle 构建机制 ⑤ ( 在 Android Studio 中查看 Android Gradle 插件源码 )
选择 " 菜单栏 / File / New / New Project… " 选项 ,
韩曙亮
2023/03/30
1.8K0
【Android Gradle 插件】Gradle 构建机制 ⑤ ( 在 Android Studio 中查看 Android Gradle 插件源码 )
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑤ ( 自定义插件中获定义方法 | 在插件中创建 Gradle 任务 | 代码示例 )
在 自定义 Gradle 插件 的 Extension 扩展 中 , 可以定义方法 , 定义的方法可以带参数 , 也可以不带参数 ;
韩曙亮
2023/03/30
1.8K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑤ ( 自定义插件中获定义方法 | 在插件中创建 Gradle 任务 | 代码示例 )
android gradle command not found在Mac中
这个问题是在命令行中使用gradle命令不存在 只需要找到本地的gradle然后加到.zshrc文件中
tea9
2022/07/16
1.1K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ② ( buildSrc 目录中实现 Gradle 插件 | 实现 Gradle 插件代码 | 模块引入插件并编译 )
在 buildSrc 模块 中的 src/main/groovy 目录 下 , 创建 MyPlugin.groovy 代码文件 作为插件的主要代码 , 代码如下 :
韩曙亮
2023/03/30
5380
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ② ( buildSrc 目录中实现 Gradle 插件 | 实现 Gradle 插件代码 | 模块引入插件并编译 )
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ④ ( 为自定义 Gradle 插件的扩展配置扩展 | 在自定义插件中获取扩展属性 )
在上一篇博客 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 ) 中 , 实现了 自定义插件 的 扩展 Extension , 在 Module 模块下的 build.gradle 构建脚本中 , android 配置块 就是一个 AppExtension 扩展 , 但是在 android 扩展下又定义了 defaultConfig 扩展 , 这是一个 ProductFlavor 配置 ;
韩曙亮
2023/03/30
2.1K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ④ ( 为自定义 Gradle 插件的扩展配置扩展 | 在自定义插件中获取扩展属性 )
Android apk中so库文件未压缩
升级AS 3.6.1, 并且升级project build.gradle AGP 到3.6.1, 一个项目发现打包后文件骤然增大, 查看apk包,发现apk 包中so库文件未被压缩. 但是一个类似项目,相同版本却没有问题
全栈程序员站长
2022/07/02
1.3K0
Android apk中so库文件未压缩
【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ③ ( 在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置 )
在上一篇博客 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ① ( 组件化简介 | 创建组件化应用 | 依赖库模块 / 应用模块 切换设置 ) 最后提到了 在 Gradle 构建脚本中 , 需要实现 依赖库模块 / 应用模块 切换设置 , 主要涉及如下两个方面 :
韩曙亮
2023/03/30
2.2K0
【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ③ ( 在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置 )
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ① ( buildSrc 目录中实现 Gradle 插件 | 创建 src/main/groovy 源码目录并编译 )
创建 Gradle 插件 , 一般是在 Android Studio 或者 IntelliJ IDEA 中 , 创建一个插件模块 , 这里以 AS 中为例 ;
韩曙亮
2023/03/30
1.6K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ① ( buildSrc 目录中实现 Gradle 插件 | 创建 src/main/groovy 源码目录并编译 )
【Android Gradle 插件】自定义 Gradle 插件模块 ① ( 在 Module 模块中自定义 Gradle 插件 | 创建自定义插件类型模块 | 手动导入相关依赖 )
在上一篇博客 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 ) 中 , 总结了在 Android Studio 工程中 自定义 Gradle 插件 , 并在 build.gradle 构建脚本 中导入插件的代码 ;
韩曙亮
2023/03/30
2.2K0
【Android Gradle 插件】自定义 Gradle 插件模块 ① ( 在 Module 模块中自定义 Gradle 插件 | 创建自定义插件类型模块 | 手动导入相关依赖 )
Android – 在Gradle中更改APK文件名
默认情况下,Android Studio中的Gradle构建命名为.apk文件app-release.apk。对应用程序build.gradle文件进行了一些小的更改,可以将.apk名称更改为<app name>-release-<version>.apk。 需要在app的目录下面修改build.gradle文件。 第一步是将project.archivesBaseName设置为您的应用程序名称。 android { compileSdkVersion 25 buildToolsVersio
code_horse
2018/07/02
3K0
【Android Gradle 插件】自定义 Gradle 插件模块 ② ( 在模块中定义插件 | 引入自定义 Gradle 插件模块 | 配置 Gradle 插件上传选项 | 配置分组名称版本号 )
在插件模块中的 src/main 目录 下创建 groovy 目录 , 用于存放 Groovy 代码 , 在其中定义包名以及包名下的源码 :
韩曙亮
2023/03/30
1.8K0
【Android Gradle 插件】自定义 Gradle 插件模块 ② ( 在模块中定义插件 | 引入自定义 Gradle 插件模块 | 配置 Gradle 插件上传选项 | 配置分组名称版本号 )
【Android Gradle 插件】自定义 Gradle 任务 ⑩ ( 自定义任务类继承 DefaultTask 类 | TaskContainer#create 函数创建任务 | 生成自定义任务)
Gradle 任务就是一个 Task 类 , 在 Gradle 脚本中 , 可以 自定义 Task 类 ,
韩曙亮
2023/03/30
8880
【Android Gradle 插件】自定义 Gradle 任务 ⑩ ( 自定义任务类继承 DefaultTask 类 | TaskContainer#create 函数创建任务 | 生成自定义任务)
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )
在 Gradle 自定义插件 Plugin 中 , 如果要执行复杂的工作 , 可以在 实现的 Plugin 接口的 apply 函数中执行 ;
韩曙亮
2023/03/30
1K0
Android中Gradle使用
Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。
海哥@开发
2022/04/06
8690
Android中Gradle使用
Android Studio 自定义Gradle插件
之前写了一个Android中的AOP框架Cooker.这里总结一下里面用到的两块小知识:
乱码三千
2021/07/29
8770
Android Studio 自定义Gradle插件
Gradle For Android(9)--自定义构建
现在我们知道了Gradle如何工作,如何创建自己的Task以及Plugin,如何执行test任务,如何设置CI。这一章会包含一些小技巧,接下来会从以下Topic进行讨论:
None_Ling
2018/10/24
7250
Gradle For Android(9)--自定义构建
【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )
Android Plugin DSL Reference 参考文档 : https://google.github.io/android-gradle-dsl/2.3/
韩曙亮
2023/03/30
6260
【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )
点击加载更多

相似问题

Android Gradle 3.0和本地库的“未解析引用R”

11

android项目中未解析android项目库中的类

21

Android Studio Gradle依赖项未解析

13

Android Gradle --在gradle中实现Apache时未能解决错误

325

Gradle未能解析Android中的库

127
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档