我有一个在开发中使用basicHttpbinding的WCF服务。 现在在产品中我们想要使用SSL,我只需要做什么改变来强制SSL连接?
更新10/19/2010我知道前一段时间我问过这个问题,但是这些答案中显示的解决方法几乎不能令人满意,这对于很多人来说仍然是一个常见问题。 WCF只是不灵活。 我创build了自己的开源C#库,用于在不使用WCF的情况下创buildREST服务。 检查restcake.net或rest.codeplex.com的信息在上述图书馆。 END UPDATE 更新2012年8月2日 ASP.NET Web API (以前WCF Web API,replaceREST WCF)默认情况下使用Json.NET END UPDATE DataContractJsonSerializer无法处理Json.Net正确configuration(特别是循环)时处理的很多scheme。 一个服务方法可以返回一个特定的对象types(在这种情况下是一个DTO ),在这种情况下, DataContractJsonSerializer将被使用,或者我可以让该方法返回一个string,并使用Json.Net自己完成序列化。 问题是,当我返回一个JSONstring,而不是一个对象,发送到客户端的JSON包装在引号。 使用DataContractJsonSerializer ,返回一个特定的对象types,响应是: {"Message":"Hello World"} 使用Json.Net来返回一个JSONstring,响应是: "{\"Message\":\"Hello World\"}" 我不想在客户端上得到eval()或者JSON.parse()这个结果,如果json以stringforms返回,用引号括起来,这就是我所要做的。 我意识到行为是正确的; 这不是我想要/需要的。 我需要原始的json; 服务方法的返回types是对象的行为,而不是string。 那么,如何让我的方法返回一个对象types,但不使用DataContractJsonSerializer? 我怎样才能告诉它使用Json.Net序列化器呢? 或者,有没有办法直接写入响应stream? 所以我可以自己回来原始的json? 没有包装报价? 这是我作的例子,供参考: [DataContract] public class SimpleMessage { [DataMember] public string Message { get; set; } } [ServiceContract] [AspNetCompatibilityRequirements(RequirementsMode […]
我试图从我的客户端控制台应用程序访问我的WCF服务进行testing。 我收到以下错误: 调用者未被服务authentication 我正在使用wsHttpBinding 。 我不确定服务期待什么样的身份validation? <behaviors> <serviceBehaviors> <behavior name="MyTrakerService.MyTrakerServiceBehavior"> <!– To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment –> <serviceMetadata httpGetEnabled="true"/> <!– To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to […]
我需要使用x509证书通过互联网从富客户端获得安全的消息级别身份validation才能获得安全的WCF Web服务。 具体而言,我正在寻找设置,configuration,编码和部署的分步指南,包括创build“开发”证书,安装它,以及获取“真实”生产证书。
阅读MSDN参考后,我仍然有关于何时使用KnownType属性的问题。 我知道该属性传递types信息到序列化程序,但是什么时候需要? 当被序列化的类引用了一个基类types,并且有可以被设置为那些引用的向上派生类时是否合适? 而且,过度使用这个属性有什么缺点吗? 例如,在前面的例子中,如果序列化类被标记了KnownType(baseClass),即使有一个明确的引用types?
我有一个简单的服务,我部署到Azure。 可通过以下方式访问: http://xxxxxxxxxxxxxxxxxxxxxxx.cloudapp.net/MyTestService.svc WSDL的URL使用内部机器名称而不是公用DNS: svcutil.exe http://rd001520d328923a/MyTestService.svc?wsdl 显然,这个WSDL不能从机器外部访问。 我知道有几件事情可以改变,如果你在IIS中运行它,或者如果你知道服务的URL。 例如,更改<serviceMetadata>configuration来指定httpGetUrl属性,但是这不起作用,因为我必须包含绝对URL。 使用相对URL,它仍然使用内部机器名称。 真正的问题是WSDL包含了与机器名称相关的URL引用,因此使其无效。 有两个不合标准的解决方法: 有人build议,我可以抓住WSDL,编辑它来修复这些URL,然后上传它,以便从不同的URL访问。 我发现从2010年初开始有一个修复程序可用,但是有一个更好的方法。 如何才能解决这个公众面临的DNS而不是机器名?
我正在开发一个简单的wcf服务来testing。 当我使用本地IIS 7.5testing此服务时,它正常工作。 但是,当我在web IIS中托pipe它,我收到此错误: 无法find在ServiceHost指令中作为Service属性值提供或者在configuration元素system.serviceModel / serviceHostingEnvironment / serviceActivations中提供的types“WcfServiceLibrary1.Service1”。 而我的ServiceHost是: <%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1" %> 请帮我解决这个问题
我正在做一个WCF服务的AJAX调用,当我传递我的数据我使用JSON.stringify() 调用返回并正常工作在FF,&Chrome,但不是IE8。 我得到一个错误:'JSON'是未定义的 build议? PS我也希望这个工作在IE7
对于初学者,让我把它扔出去,我知道下面的代码是不是线程安全的(更正:可能)。 我所苦苦挣扎的是find一个实现,一个实际上我可以在testing中失败的实现。 我正在重构一个大的WCF项目,它需要一些(大部分)静态数据caching,并从SQL数据库填充它。 它需要过期,至less每天“刷新”一次,这就是为什么我使用MemoryCache。 我知道,下面的代码不应该是线程安全的,但我不能让它在重负载下失败,并使谷歌search显示实现两个方面的事情复杂化(有和没有锁结合辩论,无论它们是否有必要。 是否可以在multithreading环境中使用MemoryCache的知识,让我明确知道是否需要在适当的位置locking,以便在检索/重新填充期间移除调用(很less被调用但是它的一个要求)不会被抛出。 public class MemoryCacheService : IMemoryCacheService { private const string PunctuationMapCacheKey = "punctuationMaps"; private static readonly ObjectCache Cache; private readonly IAdoNet _adoNet; static MemoryCacheService() { Cache = MemoryCache.Default; } public MemoryCacheService(IAdoNet adoNet) { _adoNet = adoNet; } public void ClearPunctuationMaps() { Cache.Remove(PunctuationMapCacheKey); } public IEnumerable GetPunctuationMaps() { if (Cache.Contains(PunctuationMapCacheKey)) { […]
背景 过去我已经创build了ASMX Web服务,并能够使用地址约定从Web浏览器和Ajax GET请求访问服务: MyService.asmx/MyMethod?Param=xxx 我刚刚开始使用WCF,并在ASP.NET项目中创build了一个新的Web服务。 它创build一个带有.svc扩展名的文件,如MyService.svc。 现在的情况 我能够使用VS2008附带的WcfTestClient使用服务。 我也可以通过在另一个项目中添加服务引用或使用svcutil.exe命令行来生成代理和configuration文件来创build自己的WCF客户端。 问题 当我尝试从浏览器使用MyService.svc/MyMethod?MyParam=xxx ,我得到一个没有任何错误的空白页面的服务。 我曾经尝试过 我已经添加了一个basicHttpBinding到web.config,并在行为configuration中将其设置为HttpGetEnabled 。 我还在我的操作合同中添加了[WebGet(UriTemplate = "MyMethod?MyParam={MyParam}")]属性。 我已经在这个其他堆栈溢出问题的信息: 用于WCF服务的REST / SOAP EndPoints 不过,在执行这些步骤后,我得到一个空白页面或一个HTTP 404错误。 代码没有什么特别之处。 我只是把一个string作为参数,并返回“你好xxx”。 这是一个基本的“你好WCF世界”概念certificatetypes的东西。 更新 – 这是相关的代码 [ServiceContract] public interface IMyService { [WebGet(UriTemplate = "MyMethod/MyParam={MyParam}")] [OperationContract] string MyMethod(string MyParam); } Web.Config – system.serviceModel部分 <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceMetadata httpGetEnabled="true" […]