Windows Communication Foundation是.NET Framework的一部分,它为快速构建面向服务的应用程序提供了统一的编程模型。
没有 EndPoint 监听 http://localhost/Service1.svc
http://localhost:6272/Service1.svc 上没有侦听端点可以接受该消息。 这通常是由不正确的地址或 SOAP 操作引起的。请参阅内部异常, 如果存在,对于
我有以下 jQuery 调用 WCF 方法的部分。方法调用成功,我可以看到它正在记录并且它确实返回布尔值 true。然而,错误处理程序又回来了...
运行应用程序可执行文件时,在 WinForm 应用程序中托管 WCF 服务不起作用
在过去的几周里,我开发了一个 64 位 WinForms 应用程序,需要与 32 位 DLL 进行通信(工作规范需要它)。 在互联网上进行了一些阅读并发现...
解决WCF DataContract DataMember Order反序列化问题
与遗留 WCF 接口的一个用例是将所有 .NET 服务代码隐藏在更现代的 RESTful API 后面,我们将(看似正确的)XML 发布到该 API,并将其反序列化为 WCF 类...
如何在 C# 中以编程方式使用证书身份验证设置 ServiceClient? 我不想使用.config。 使用(var srv = GetServiceInstance()) { srv.DoSt...
我正在尝试修复此错误,我知道还有其他类似的问题也有相同的错误,但行:request.ContentLength = 0;它不能解决我的异常。 这是我的图像代码: 噗...
Application Insights 缺少 WCF 服务的数据库调用跟踪
我正在对某些 WCF 服务使用 Application Insights 跟踪,但似乎我看不到作为请求的一部分执行的数据库调用。 例如,点击交易,我看不到
使用 WCF 设置 NTLM 身份验证到 Sharepoint Web 服务
我在设置 WCF 服务与 Sharepoint Web 服务通信时遇到了很多困难,特别是我正在尝试使用 Lists.asmx 和 Copy.asmx 服务。 我用它来工作......
合约需要 Session,但绑定“WSHttpBinding”不支持它或未正确配置以支持它
我已指定服务合同需要会话。 [ServiceContract(SessionMode = SessionMode.Required)] 公共接口 ITicketSales { } 服务装饰如下: [服务...
我已在 IIS 中安装了 SSL 证书。 现在,当我导航到我的域 https://www.example.com/ 时,页面加载正确。 但是当我尝试访问网络服务时(通常工作完美......
我遇到了一种情况,我们正在连接到 SOAP 服务。 我们得到的响应看起来像这样: 1 2 我遇到了一种情况,我们正在连接到 SOAP 服务。 我们得到的回复看起来像这样: <SomeObject> <item1>1</item1> <thing1>2</thing1> <arrayItem><foo>text</foo></arrayItem> <arrayItem><foo>text1</foo></arrayItem> <arrayItem><foo>text2</foo></arrayItem> </SomeObject> 我需要复制该响应的输出。我一直遇到的问题是 <arrayItem> 被 <arrayItemList> 封装,我真的需要 <arrayItemList> 消失。 有谁知道我可以在 WCF 对象上放置什么来正确序列化/反序列化我们收到的对象? 编辑 我正在使用的对象是这样的: [DataContract] public class SomeObject { [DataMember(Order = 0)] public string item1 {get;set;} [DataMember(Order = 1)] public string thing1 {get;set;} [DataMember(Order = 2)] public List<arrayItem> {get;set;} } [DataContract] public class arrayItem { [DataMember] public string foo {get;set;} } 不幸的是我无法找到一个很好的解决方案。不过,我确实找到了一个可行的解决方案。 警告 - 如果可能的话,您应该尝试修改 WSDL 以防止需要此解决方案。这更像是一种黑客攻击,而不是建议的解决方案,但在紧要关头会起作用。 解决方案是实现 IClientMessageInspector 和 IEndpointBehavior。这些接口允许访问原始文本请求和响应。这些允许在消息发送到服务或由 WCF 反序列化之前对其进行修改。下面是我的实现和一个自定义类,允许我对消息进行所需的修改。 public class MyService : IClientMessageInspector { public void DoWork() { // Do some stuff } public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState) { string message = reply.ToString(); // Load the reply message in DOM for easier modification XmlDocument doc = new XmlDocument(); doc.Load(reply.GetReaderAtBodyContents()); // Perform the modification MessageHelper.FixArrays(doc); // Create New Message XmlNodeReader reader = new XmlNodeReader(doc.DocumentElement); Message newMsg = Message.CreateMessage(reply.Version, reply.Headers.Action, reader); // Preserve the headers of the original message if (reply.Headers.Any()) newMsg.Headers.CopyHeaderFrom(reply, 0); foreach (string propertyKey in reply.Properties.Keys) { newMsg.Properties.Add(propertyKey, reply.Properties[propertyKey]); } // Close the original message and return new message reply.Close(); reply = newMsg; } public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel) { return null; } } public static class MessageHelper { public static void FixArrays(XmlDocument doc) { // Arrearage WrapElement(doc, "foo", "arrayItem", "http://url.com/namespace/foo"); } private static void WrapElement(XmlDocument doc, string elementName, string wrapperName, string nameSpace) { var names = new XmlNamespaceManager(doc.NameTable); names.AddNamespace("a", nameSpace); var Nodes = doc.SelectNodes("//a:" + elementName, names); if (Nodes.Count > 0) { var newBorrower = doc.CreateElement(Nodes.Item(0).Prefix, wrapperName, Nodes.Item(0).NamespaceURI); foreach (XmlElement node in Nodes) { newBorrower.AppendChild(node.Clone()); } Nodes.Item(0).ParentNode.ReplaceChild(newBorrower, Nodes.Item(0)); for (int i = 1; i <= Nodes.Count - 1; i++) { Nodes.Item(i).ParentNode.RemoveChild(Nodes.Item(i)); } } } private static void WrapRenameElement(XmlDocument doc, string newName, string elementName, string wrapperName, string nameSpace, string newNamespace) { var names = new XmlNamespaceManager(doc.NameTable); names.AddNamespace("a", nameSpace); names.AddNamespace("b", newNamespace); var Nodes = doc.SelectNodes("//a:" + elementName + "/..", names); foreach (XmlElement parent in Nodes) { var newBorrower = doc.CreateElement(parent.Prefix, wrapperName, parent.NamespaceURI); foreach (XmlElement child in parent.ChildNodes) { if (child.LocalName == elementName) { var newNode = RenameNode(child.Clone(), newNamespace, newName); parent.RemoveChild(child); newBorrower.AppendChild(newNode); } } if (newBorrower.ChildNodes.Count > 0) parent.AppendChild(newBorrower); } } private static void WrapRenameElement(XmlDocument doc, string newName, string elementName, string wrapperName, string nameSpace) { var names = new XmlNamespaceManager(doc.NameTable); names.AddNamespace("a", nameSpace); var Nodes = doc.SelectNodes("//a:" + elementName + "/..", names); foreach (XmlElement parent in Nodes) { var newBorrower = doc.CreateElement(parent.Prefix, wrapperName, parent.NamespaceURI); foreach (XmlElement child in parent.ChildNodes) { if (child.LocalName == elementName) { var newNode = RenameNode(child.Clone(), nameSpace, newName); parent.RemoveChild(child); newBorrower.AppendChild(newNode); } } if (newBorrower.ChildNodes.Count > 0) parent.AppendChild(newBorrower); } } public static XmlNode RenameNode(XmlNode node, string namespaceURI, string qualifiedName) { if (node.NodeType == XmlNodeType.Element) { XmlElement oldElement = (XmlElement)node; XmlElement newElement = node.OwnerDocument.CreateElement(qualifiedName, namespaceURI); while (oldElement.HasAttributes) { newElement.SetAttributeNode(oldElement.RemoveAttributeNode(oldElement.Attributes[0])); } while (oldElement.HasChildNodes) { newElement.AppendChild(oldElement.FirstChild); } if (oldElement.ParentNode != null) { oldElement.ParentNode.ReplaceChild(newElement, oldElement); } return newElement; } else { return null; } } } 就像我说的,它不漂亮,本质上是一个黑客,但这个解决方案可以解决我遇到的问题。我希望没有其他人需要处理这个问题,但如果他们这样做,我希望这会有所帮助。 如果我明白你在寻找什么,请尝试添加属性: [XmlElement("arrayItem")] public List<arrayItem> arrayItems {get; set;} 编辑: 好的,我很快尝试了一个例子,这对我有用: 对象: [DataContract] public class SomeObject { [DataMember(Order = 0)] [XmlElement()] public string item1 { get; set; } [DataMember(Order = 1)] [XmlElement()] public string thing1 { get; set; } [DataMember(Order = 2)] [XmlElement("arrayItem")] public List<arrayItem> arrayItems { get; set; } public SomeObject() { arrayItems = new List<arrayItem>(); } } [DataContract] public class arrayItem { [DataMember] [XmlElement()] public string foo { get; set; } } 使用的代码: XmlSerializerNamespaces _namespaces = new XmlSerializerNamespaces(); _namespaces.Add(string.Empty, string.Empty); SomeObject sm = new SomeObject(); sm.arrayItems.Add(new arrayItem() { foo = "foo1" }); sm.arrayItems.Add(new arrayItem() { foo = "foo2" }); sm.item1 = "item1"; sm.thing1 = "thing1"; _xmlSerializer = new XmlSerializer(typeof(SomeObject)); //writer is XmlWriter which writes data to response stream _xmlSerializer.Serialize(writer, sm, _namespaces); 结果: <SomeObject> <item1>item1</item1> <thing1>thing1</thing1> <arrayItem> <foo>foo1</foo> </arrayItem> <arrayItem> <foo>foo2</foo> </arrayItem> </SomeObject> 正在使用什么版本的.net框架?我目前面临类似的问题,我必须创建一个可以接收具有类似结构的请求的wcf
我可以将 WCF SOAP 服务迁移到 .Net 6 而无需在客户端进行任何更改吗?
我有一个使用 basicHttpBinding 的旧 .Net Framework 4.8 WCF SOAP 服务。它被许多不同的客户使用。我们正在考虑将 Linux 容器中的所有内容迁移到 .Net 6。 有什么办法吗...
我正在使用 android okhttp 将多部分数据(即图像和文本)发送到 wcf 服务。我可以使用此处提到的自定义 MultipartParser 类在服务器上发送和解析部分数据。 W...
我正在尝试创建使用 STS IssuedToken 保护的 WCF .NET 服务。 STS 由 X509 保护。 我用.NET框架开发了一个客户端并且它可以工作。 我在网上进行了研究,发现...
Blazor Server 的默认 WebHost 是什么?
我有一个 blazor 服务器应用程序,我想向其中添加 WCF NetTcp 侦听端口。常规 Blazor Server Program.cs 文件如下: var builder = WebApplication.CreateBuilder(args); 布...
WCF Rest ERR_CONNECTION_RESET 响应不大
错误代码绝对可怕,ERR_CONNECTION_RESET 有很多原因,我在其他问题上发现的原因与大型网络的 MaxRequestLength 太小有关
与 Windows Identity Foundation 集成基于声明的授权
我正在尝试评估是否使用经典的基于主体的授权与 IdentityModel 授权。最近好像微软在推荐后者,但我还没看够......
我想开始了解 WCF,但说实话,在此之前我想了解更多有关 SOA 的总体知识。 我不太理解“企业服务总线”的概念,并且......
.Net 6 通过通道工厂连接到 WCF Soap 服务。现在效果很好。给出有关响应标头不符合的错误
正如您在图片中看到的那样,我们确实从肥皂服务中得到了良好的请求和响应 但在我们的休息服务中,我们使用带有 Swagger 的 Open Api 规范,并且我们调用...
我们正在尝试在 .NET Core Web 应用程序中使用第三方的 SOAP API。我们尝试了两种方法来获取从他们提供给我们的 WSDL 文件生成的类。 在 Visual Studio 中使用 WCF 使用 svcu...