Windows Communication Foundation是.NET Framework的一部分,它为快速构建面向服务的应用程序提供了统一的编程模型。
BizTalk 2020 WCF-Sql 轮询接收位置无响应
我有一个 BizTalk 2020 CU5 服务器。它有一个应用程序,其接收位置轮询运行简单选择的 Sql Server 数据库。 数据库的副本已移动到另一台服务器,以便...
为什么 ASP.Net MVC 模型绑定器将空 JSON 数组绑定到 null?
这是我的模型类: 公共类我的模型 { 公共雇员[] MyEmpls{get;set;} 公共 int Id{获取;设置;} 公共组织名称{get;set;} } 使用 MyE 传递以下 JSON 结构对象...
这是否使用适当的方式来处理资源,即在 WCF 方法中返回 DataSet?
这是否使用适当的方式来处理资源,即在 WCF 方法中返回 DataSet? 公共数据集搜索名称(字符串姓氏,字符串名字,日期时间DateOfBir...
我知道何时应该使用 C# 和 .NET 通过 ServicePointManager.SecurityProtocol 属性显式设置支持的 TLS 版本。 但我不知道我们为什么要这样做? ...
我需要创建一些 DTO 类来跨 WCF 传输我们的业务对象。 由于这些只是没有任何功能的数据包,有什么原因我不能只使用字段,或者有一些
添加 WCF 代理类会隐藏 Visual Studio 项目引用
我有一个奇怪的视觉工作室错误困扰着我。 我正在使用 Visual Studio 2010 我的解决方案很小,包含 2 个项目: 项目1一个类库包含以下类:
DataContract IsReference 适用于保存,但破坏了我的获取操作
我正在从 ASP.NET 应用程序调用 WCF 服务。 我的保存操作失败,并且收到一条错误消息,提示我必须设置一个属性: [DataContract(IsReference = true)] 现在我的...
我对 Web 服务尤其是 WCF 相当陌生,所以请耐心等待。 我正在编写一个 API,它需要几个参数,例如用户名、apikey 和一些选项,但我还需要向它发送一个字符串...
从服务引用创建 WCF 客户端时,MessageSecurityOverHttpElement 中出现 IndexOutOfRangeException
我在数千人使用的应用程序中使用“添加服务引用”创建了一个正常的 WCF 服务引用。 客户端的实例是使用 new MyServiceClient() 创建的,它...
乍一看,这可能听起来是一个糟糕的主意,但这是我的场景:我有一个 Windows 服务,它使用用户名身份验证公开多个 WCF 端点。 定制正品...
我是 Postgresql 新手,我正在使用 WCF 服务。 这是我的代码片段: $.ajax({ url: '../Services/AuctionEntryServices.svc/InsertAuctionDetails', 数据:JSON.stringify({“
WCF InvalidOperationException:绑定实例已关联到侦听 URI
我是 WCF 的初学者,仍在学习基础知识。 我在使用 ServiceContract NameSpace 和 Name 时遇到问题。 当我运行代码时,我得到一个 InvalidOperationException,但我不知道...
我收到了这条可怕的消息,并花了相当多的时间阅读它,但仍然无法解决它 我的客户端上运行着一个控制台应用程序,试图调用 WCF 服务...
我正在发送 WCF 请求,每个请求都需要具有自定义标头 - 必须将包含用户名和密码的属性添加到每个请求中。 我已经成功地做到了这一点,只有一个例外......
SOAP 服务 - 无法将源类型 [Something[]] 转换为目标类型 [Something]
我正在将第 3 方 SOAP 服务消费到我的 DotNetCore c# 控制台应用程序中 为此,我通过导入 WSDL 添加到服务引用中 (添加 --> 连接服务 --> WCF Web 服务...
*如果您认为我应该在其他地方问这个问题,请告诉我。 背景: 我需要构建一个将重量转换为件数的应用程序。目前的重量来自秤...
我的问题是根元素被写入了两次。我想删除由 MessageHeader 本身生成的根元素: 我的代码: var el = XElement.Parse("
如何从 DataContract 类中的 KnownType 中删除类型属性?
是否可以使用 KnownType 的类名而不是父类作为标签?例如 这是较大的 DataContract xml 文件的摘录, [DataContract (命名空间 = "projectNames...
我需要将以下 WSE Soap 标头添加到对外部 Web 服务的请求中。 我需要将以下 WSE Soap 标头添加到对外部 Web 服务的请求中。 <wsse:Security soapenv:mustUnderstand="1" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsu:Timestamp wsu:Id="TS-BA5FAF729341A20EE515496307400673630"> <wsu:Created>2019-02-08T12:59:00.067Z</wsu:Created> <wsu:Expires>2019-02-08T13:32:20.067Z</wsu:Expires> </wsu:Timestamp> <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-BA5FAF729341A20EE515496307400083621">MIIGgjCCBGqgAwIB…</wsse:BinarySecurityToken> <ds:Signature Id="SIG-BA5FAF729341A20EE515496307400583629" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> <ec:InclusiveNamespaces PrefixList="wsa duo soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:CanonicalizationMethod> <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/> <ds:Reference URI="#id-BA5FAF729341A20EE515496307400083624"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> <ec:InclusiveNamespaces PrefixList="duo soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transform> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue>BwIgcnbARGgMPWeDrjR52LGfEf6j/WcF8eE1MQt/MSQ=</ds:DigestValue> </ds:Reference> <ds:Reference URI="#id-BA5FAF729341A20EE515496307400083625"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> <ec:InclusiveNamespaces PrefixList="duo soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transform> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue>NDNJrnpAfEcBvCeNvlk3EhMQy8YkL+86XKPHNHkklag=</ds:DigestValue> </ds:Reference> <ds:Reference URI="#id-BA5FAF729341A20EE515496307400083626"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> <ec:InclusiveNamespaces PrefixList="duo soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transform> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue>VZrfhemL9OWCsxmN2x4ymGo8LqhyhN1vDyOaQmmEMcA=</ds:DigestValue> </ds:Reference> <ds:Reference URI="#id-BA5FAF729341A20EE515496307400083627"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> <ec:InclusiveNamespaces PrefixList="duo" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transform> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue>wRYqFkSq1EU4D6E2dapniCnXAYW4kPWuZ0k/pKnTnkI=</ds:DigestValue> </ds:Reference> <ds:Reference URI="#id-BA5FAF729341A20EE515496307400083628"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> <ec:InclusiveNamespaces PrefixList="duo soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transform> </ds:Transforms> 22 <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue>WFpN2A3HvK+b6j4tdgw/N+0DgHnI4THLyQsz8JnA8jY=</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue>U3f4vdrlrYtSMJ+zXmJ+RyvWt6gZEF9WoiT7dmD2YbL8SYzztOl/foyKLbj9fs8yEqGOL7YEZmev RrQxfePZ7FhP/dW7kBHkhXrUrzYakEA3Tdl21vPwtdNeq0NS9DzASUMPMdWESTDo+qDdzN4HO7MD H4ZQFa8ZuIrJ4Kuo46Ha7Lx/LH2uM0dJBR/XA49LrDqecmdwxV7poELoqsVv4v0kF9iuQI6eeqnW fjDveJ7C/aF1xwl+BB/vtJlaZrd1r9GAsgfZCEfOlLdaTkqGYPd8flQuBaf9hBfY+RKJSFfMmgz4 kaax0DumfavDnTrZ8fn2iI4dlEW10EkLqMqFfg==</ds:SignatureValue> <ds:KeyInfo Id="KI-BA5FAF729341A20EE515496307400083622"> <wsse:SecurityTokenReference wsu:Id="STR-BA5FAF729341A20EE515496307400083623"> <wsse:Reference URI="#X509-BA5FAF729341A20EE515496307400083621" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/> </wsse:SecurityTokenReference> </ds:KeyInfo> </ds:Signature> </wsse:Security> 我相信这是某种标准的 WS 安全性。在跟踪了 stack、github 和博客上的数十个“示例”后,我完全困惑了。似乎 WCF/.NET 组合的每个版本都有不同的功能、不同的结构等。没有一个例子可以正常工作。 我到目前为止: static void Main(string[] args) { Console.WriteLine("Hello, World!"); ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => { return true; }; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12; WSHttpBinding binding = new WSHttpBinding(); binding.Security = new WSHttpSecurity() { Mode = SecurityMode.Transport, Transport = new HttpTransportSecurity() { ClientCredentialType = HttpClientCredentialType.Certificate, } }; binding.Security.Mode = SecurityMode.TransportWithMessageCredential; binding.Security.Message.ClientCredentialType = MessageCredentialType.Certificate; binding.Security.Message.EstablishSecurityContext = false; binding.Security.Message.NegotiateServiceCredential = false; binding.Security.Message.AlgorithmSuite = SecurityAlgorithmSuite.Basic256Sha256; //https://xml-test.duo.nl:6990/vsv-webservice/services/DUO_RelatiefVerzuim_V13 EndpointAddress endpointAddress = new EndpointAddress("https://xml-test.duo.nl:6990/vsv-webservice/services/DUO_RelatiefVerzuim_V13"); DuoClient duoClient = new DuoClient(binding, endpointAddress); duoClient.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2("D:\\Temp\\*******.pfx", "**********"); duoClient.ChannelFactory.Endpoint.EndpointBehaviors.Add(new LoggingEndpointBehavior()); try { using (OperationContextScope scope = new OperationContextScope(duoClient.InnerChannel)) { OperationContext.Current.OutgoingMessageHeaders.To = new Uri("http://www.w3.org/2005/08/addressing/anonymous?oin=00000001800866472000"); OperationContext.Current.OutgoingMessageHeaders.From = new EndpointAddress("http://www.w3.org/2005/08/addressing/anonymous?oin=0000000700025MB00000"); OperationContext.Current.OutgoingMessageHeaders.MessageId = new System.Xml.UniqueId(Guid.NewGuid()); //OperationContext.Current.OutgoingMessageHeaders.Action = "http://duo.nl/contract/DUO_Ping_V1/ping"; // One-way var response = duoClient.meldenRelatiefVerzuim_V7(new MeldenRelatiefVerzuim_V7_Request() { bRIN = "", contactpersoon = new Contact() { contactnaam = "", emailadres = "", functieContact = "", telefoonnummer = "" } }); //OperationContext.Current.Extensions.Add(new LoggingEndpointBehavior()); // Done with service. duoClient.Close(); Console.WriteLine("Done!"); Console.ReadLine(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadKey(); } 输出示例: <s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:Header> <a:Action s:mustUnderstand="1">http://duo.nl/contract/DUO_RelatiefVerzuim_V13/meldenRelatiefVerzuim_V7</a:Action> <a:To s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/anonymous?oin=00000001800866472000</a:To> <a:From> <a:Address>http://www.w3.org/2005/08/addressing/anonymous?oin=0000000700025MB00000</a:Address> </a:From> <a:MessageID>urn:uuid:96c4c3c5-73f2-4f7a-849a-3a5613d1a4c4</a:MessageID> <ActivityId CorrelationId="33dd0450-26cd-4529-93f4-8b37ca3ecb57" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">61878aaf-b8d7-4bc0-800f-26a25c3e8b29</ActivityId> <a:ReplyTo> <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> </a:ReplyTo> </s:Header> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <meldenRelatiefVerzuim_Request xmlns="http://duo.nl/schema/DUO_RelatiefVerzuim_V13"> <datumTijdBedrijfsdocument>0001-01-01T00:00:00</datumTijdBedrijfsdocument> <bRIN /> <contactpersoon> <contactnaam /> <functieContact /> <telefoonnummer /> <emailadres /> </contactpersoon> </meldenRelatiefVerzuim_Request> </s:Body> </s:Envelope> 无论我更改什么,都不会添加MessageCredential,我什至尝试了普通的用户名密码MessageCredential,但没有任何内容添加到请求消息中。几乎如果我缺少一个打开它的开关。 有谁知道如何解决这个问题吗? 编辑:我在 .NET 8.0 上尝试过,但关于 WCF 如何在 .NET 8 中工作的示例代码非常少。我什至无法让 TLS 在 .NET 8 上工作。服务器证书是自签名的,我需要覆盖不起作用的验证。至少不像 .NET 4.8 或任何在线示例中那样。 事实证明,WS-Security 的标头是稍后在该过程中添加的,然后是消息检查器。 我需要正确配置诊断跟踪才能查看消息,即使如此,我也需要打开传输级别日志记录才能查看它们。它们在服务级别不可见 <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /> </startup> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="DUO_RelatiefVerzuim_V13_Binding" /> </basicHttpBinding> </bindings> <diagnostics> <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000" maxSizeOfMessageToLog="2000000000"/> </diagnostics> </system.serviceModel> <system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true" > <listeners> <add name="xml"/> </listeners> </source> <source name="System.ServiceModel.MessageLogging"> <listeners> <add name="xml"/> </listeners> </source> <source name="myUserTraceSource" switchValue="Information, ActivityTracing"> <listeners> <add name="xml"/> </listeners> </source> </sources> <sharedListeners> <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="d:\temp\trace.svclog" /> </sharedListeners> </system.diagnostics> </configuration>
使用枚举作为返回参数时出现 ServiceKnownType 错误
我创建了一个使用一些枚举的 WCF 服务。 到目前为止一切顺利,枚举似乎按预期进行了序列化。 但是,如果对象的接口使用该枚举作为