Tag: wcf

在Web API中使用HttpClient发布JsonObject

我试图从Web API使用HttpClient POST JsonObject 。 我不太清楚如何去解决这个问题,在代码示例中找不到太多东西。 以下是我到目前为止: var myObject = (dynamic)new JsonObject(); myObject.Data = "some data"; myObject.Data2 = "some more data"; HttpClient httpClient = new HttpClient("myurl"); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.Post("", ???); 我想我需要把我的JsonObject当成StreamContent来投放,但是我正在把这个步骤挂起来。

HTTP无法注册URL http:// +:8000 / HelloWCF /。 你的进程没有这个命名空间的访问权限

我是WCF的初学者,但试图改善我的经验。 在第一步我面临这个问题。 我创build了最简单的WCF服务。 代码清单:(所有代码在一个文件中) using System; using System.ServiceModel; namespace EssentialWCF { [ServiceContract] public interface IStockService { [OperationContract] double GetPrice(string ticker); } public class StockService : IStockService { public double GetPrice(string ticker) { return 94.85; } } class Service { static void Main(string[] args) { ServiceHost serviceHost = new ServiceHost(typeof(StockService), new Uri("http://localhost:8000/HelloWCF")); serviceHost.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding()); serviceHost.Open(); […]

CryptographicException'Keyset不存在',但只能通过WCF

我有一些代码可以调用使用X.509authentication保护的第三方Web服务。 如果我直接调用代码(使用unit testing),它没有任何问题。 部署时,将通过WCF服务调用此代码。 我添加了第二个调用WCF服务的unit testing,但是,当我调用第三方Web服务的方法时,将失败,出现CryptographicException ,消息"Keyset does not exist" 。 我认为这是因为我的WCF服务将尝试使用不同的用户给我自己调用第三方Web服务。 任何人都可以在这个问题上进一步阐明?

.NET Remoting真的被弃用了吗?

大家都在说.NET Remoting如何被WCF取代,但是我想知道这是多么准确。 我还没有看到任何官方的说Remoting被弃用,在我看来Remoting确实比WCF更有意义。 与Remoting相关的对象或方法都不被推荐,即使在框架的4.0版本中也是如此。 这也是我的理解,3.5和4.0框架中的System.AddIn使用远程处理。 有没有人有任何官方的话呢? 在文章中, select.NET中的通信选项 (3.0版本,因为这是该文章的最新版本),它指出: 8跨应用域通信 如果您需要支持同一进程中不同应用程序域中对象之间的通信,则必须使用.NET远程处理。 那么,这当然不准确,因为WCF肯定可以用来跨越应用程序边界,但它是否给出了正式的build议呢? 更新:我发送了Clemens Vasters(谁是拥有Remoting和WCF的团队)这个问题: 克莱门斯,我知道你是在同时拥有远程和wcf的团队中的,我有几个问题,我相信我需要去源代码。 首先,我有一个关于远程遥控是否正在消失的问题。 具体来说,我们有一个相当大的应用程序,广泛使用远程处理跨进程的跨应用程序域通信,我想知道这种远程使用是否被认为是“遗留”。 如果是这样,将AppDomain.CreateInstance和朋友用别的东西replace? 这是他的回答: 远程处理是.Net框架的一部分,因此它不会消失。 COM自Windows NT 3.5 / Windows 95以来一直在Windows,并没有消失,我也看不到很快就会离开。 也就是说,Remoting有很less的开发投入。 WCF是Remoting的inheritance者,代替了托pipe代码的COM / DCOM。 对于进行中的跨应用程序域通信,Remoting是CLR本身的通信方式。 如果您在短时间内看到性能问题抽取大量数据或发送大量消息,则应该仔细查看WCF和NetNamedPipeBinding。

有什么办法来处理ASMX服务的asynchronous/等待?

我有一个Web应用程序,为JSON和ASMX Web服务提供WCF REST API。 该应用程序已经存在了几年。 它基于ASP.NET 2.0,但几年前升级到.NET 4.0,而我刚刚升级到.NET 4.5,以便能够使用新的asynchronous框架。 应用程序背后是一些传统服务,我意识到通过asynchronous提高性能有很大的潜力。 我已经通过应用程序实现了asynchronous,并且通过WCF REST API,一切都可以正常工作。 太迟了,我发现ASMX API失败,我想这样的方法: [WebMethod(Description = "Takes an internal trip ID as parameter.")] async public Task<Trip> GetTrip(int tripid) { var t = await Trip.GetTrip(tripid); return t; } 然后我知道ASMX不支持async / await,大家build议迁移到WCF。 我对此不太高兴。 ASMX(实际上是其中的三个)被填充了不同的方法,并且有大量的API消费者,我们希望继续从旧API提供服务。 但是我们需要提高性能! 有谁知道一个解决方法,所以我可以继续使用ASMX后面的asynchronous/等待,但像以前一样公开ASMX?

WCF Datacontract,有些字段不反序列化

问题: 我有一个WCF服务设置为外部系统调用的端点。 这个调用是发送普通的XML。 我通过使用RequestBuilder将调用从Fiddler发送到服务来testing系统。 问题是我所有的领域都被反序列化,除了两个领域。 price_retail和price_wholesale 。 我错过了什么? 所有其他字段反序列化没有问题 – 服务响应。 这只是这些领域。 XML消息: <widget_conclusion> <list_criteria_id>123</list_criteria_id> <list_type>consumer</list_type> <qty>500</qty> <price_retail>50.00</price_retail> <price_wholesale>40.00</price_wholesale> <session_id>123456789</session_id> </widget_conclusion> 服务方式: public string WidgetConclusion(ConclusionMessage message) { var priceRetail = message.PriceRetail; } 消息类别: [DataContract(Name = "widget_conclusion", Namespace = "")] public class ConclusionMessage { [DataMember(Name = "list_criteria_id")] public int CriteriaId { get; set;} [DataMember(Name = "list_type")] […]

WCF服务客户端:内容typestext / html; 响应消息的charset = utf-8与绑定的内容types不匹配

我有我的本地IIS服务器上运行的WCF服务。 我已经将它作为服务引用添加到C#Website Project中,并且它会自动添加并自动生成代理类。 但是,当我尝试调用任何服务合同时,出现以下错误: 说明:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪,了解有关错误的更多信息以及源代码的来源。 exception详细信息: System.ServiceModel.ProtocolException:内容typestext / html; 响应消息的charset = utf-8与绑定的内容types(application / soap + xml; charset = utf-8)不匹配。 如果使用自定义编码器,请确保IsContentTypeSupported方法正确实施。 响应的前1024个字节是:函数bredir(var,h,wd,hd,bi; var b = false; var p = false; var s = [[ 300250,假],[250250,假],[240400,假],[336280,假],[180150,假],[468,60,假],[234,60,假],[88,31,假],[120,90,假],[120,60,假],[120240,假],[125125,假],[728,90,假],[160600,假],[120600,假] [300600,假],[300125,假],[530300,假],[190200,假],[470250,假],[720300,真],[500350,真],[550480,真]]; if(typeof(window.innerHeight)=='number'){h = window.innerHeight; w = window.innerWidth;} else if(typeof(document.body.offsetHeight)=='number'){h = document。 body.offsetHeight; w = document.body.offsetWidth;} for(var i = 0; i […]

通过VBScript调用WCF服务

有一个WCF服务的configuration: <services> <service name="MyService" behaviorConfiguration="MyServiceBehavior"> <endpoint binding="basicHttpBinding" contract="IMyService" /> <host> <baseAddresses> <add baseAddress="http://localhost:8001/MyService" /> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceMetadata httpGetEnabled="True" /> </behavior> </serviceBehaviors> </behaviors> 这个脚本应该叫它: Option Explicit Dim soapClient Dim serviceUri Dim serviceName Dim portName Dim result serviceUri = "http://localhost:8001/MyService" serviceName = "MyService" portName = "BasicHttpBinding_IMyService" Set soapClient = CreateObject("MSSOAP.soapClient") soapClient.ClientProperty("ServerHTTPRequest") […]

WCF服务契约接口的不同forms

看来我可以在以下三个不同版本的同一个WCF合同接口API之间自由切换,而不会中断客户端: [ServiceContract] interface IService { // Either synchronous // [OperationContract] // int SomeMethod(int arg); // Or TAP [OperationContract] Task<int> SomeMethodAsync(int arg); // Or APM // [OperationContract(AsyncPattern = true)] // IAsyncResult BeginSomeMethod(int arg, AsyncCallback callback, object state); // int EndSomeMethod(IAsyncResult ar); } 现有的testing客户端应用程序保持工作,无需重新编译或触摸。 如果我重新编译服务并将其引用重新导入到客户端应用程序中,那么WSDL定义将保持不变 ,即1:1。 我的问题: 这是我可以信赖的合法行为吗? 它logging在任何地方吗? 我们的想法是将一组同步SomeMethod风格的方法转换为TAP SomeMethodAsync风格的方法,在其实现中使用async/await ,从而提高WCF服务的可伸缩性,而不会破坏现有的客户端。 另外,在.NET 3.5和.NET 4.0下,WCF服务扩展方面已经出现了一些问题。 他们在MSKB文章“WCF服务可能在负载下缓慢扩展”以及CodeProject文章“调整WCF构build高度可扩展的asynchronousREST API”中有logging […]

浏览Windows Server 2008(64位)上的wcf服务时出现“HTTP错误404.3 – 未find”

我正在开发基于.Net Framework 3.5 SP1的应用程序,并在Windows Server 2008(64位)上托pipe。 在本地浏览wcf服务(.svc)时,每个事情都可以,但是在使用完整的域名url浏览时,会出现错误。 本地地址是这样的: http://localhost/MyService.svc 和域地址是这样的: http : //MySite.ir/MyService.svc 顺便说一下,页面(.aspx)和其他文件在本地主机和域地址上都能正常工作。 任何想法将不胜感激 这里是详细的错误: HTTP错误404.3 – 未find 您正在请求的页面由于扩展configuration而无法投放。 如果页面是脚本,添加一个处理程序。 如果文件应该被下载,添加一个MIME映射。 详细的错误信息 模块: StaticFileModule 通知: ExecuteRequestHandler 处理程序: StaticFile 错误代码: 0x80070032 请求的url: http : //MySite.ir : 80/MyService.svc 物理path: D:\ inetpub \ vhosts \ MySite.ir \ httpdocs \ MyService.svc login方法: 匿名 login用户匿名