wcf 相关问题

Windows Communication Foundation是.NET Framework的一部分,它为快速构建面向服务的应用程序提供了统一的编程模型。

以编程方式使用证书身份验证配置 WCF 服务客户端

如何在 C# 中以编程方式使用证书身份验证设置 ServiceClient? 我不想使用.config。 使用(var srv = GetServiceInstance()) { srv.DoSt...

回答 3 投票 0

如何修复:远程服务器返回错误:(400) 错误请求

我正在尝试修复此错误,我知道还有其他类似的问题也有相同的错误,但行:request.ContentLength = 0;它不能解决我的异常。 这是我的图像代码: 噗...

回答 2 投票 0

Application Insights 缺少 WCF 服务的数据库调用跟踪

我正在对某些 WCF 服务使用 Application Insights 跟踪,但似乎我看不到作为请求的一部分执行的数据库调用。 例如,点击交易,我看不到

回答 1 投票 0

使用 WCF 设置 NTLM 身份验证到 Sharepoint Web 服务

我在设置 WCF 服务与 Sharepoint Web 服务通信时遇到了很多困难,特别是我正在尝试使用 Lists.asmx 和 Copy.asmx 服务。 我用它来工作......

回答 2 投票 0

合约需要 Session,但绑定“WSHttpBinding”不支持它或未正确配置以支持它

我已指定服务合同需要会话。 [ServiceContract(SessionMode = SessionMode.Required)] 公共接口 ITicketSales { } 服务装饰如下: [服务...

回答 1 投票 0

通过 HTTPS 和 HTTP 访问时 WCF 服务不工作

我已在 IIS 中安装了 SSL 证书。 现在,当我导航到我的域 https://www.example.com/ 时,页面加载正确。 但是当我尝试访问网络服务时(通常工作完美......

回答 4 投票 0

WCF 在没有容器的情况下序列化数组或集合

我遇到了一种情况,我们正在连接到 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

回答 3 投票 0

我可以将 WCF SOAP 服务迁移到 .Net 6 而无需在客户端进行任何更改吗?

我有一个使用 basicHttpBinding 的旧 .Net Framework 4.8 WCF SOAP 服务。它被许多不同的客户使用。我们正在考虑将 Linux 容器中的所有内容迁移到 .Net 6。 有什么办法吗...

回答 1 投票 0

WCF 服务使用来自 android 的多部分数据

我正在使用 android okhttp 将多部分数据(即图像和文本)发送到 wcf 服务。我可以使用此处提到的自定义 MultipartParser 类在服务器上发送和解析部分数据。 W...

回答 2 投票 0

WCF 服务安全发行令牌绑定到 .NET Core

我正在尝试创建使用 STS IssuedToken 保护的 WCF .NET 服务。 STS 由 X509 保护。 我用.NET框架开发了一个客户端并且它可以工作。 我在网上进行了研究,发现...

回答 1 投票 0

Blazor Server 的默认 WebHost 是什么?

我有一个 blazor 服务器应用程序,我想向其中添加 WCF NetTcp 侦听端口。常规 Blazor Server Program.cs 文件如下: var builder = WebApplication.CreateBuilder(args); 布...

回答 2 投票 0

WCF Rest ERR_CONNECTION_RESET 响应不大

错误代码绝对可怕,ERR_CONNECTION_RESET 有很多原因,我在其他问题上发现的原因与大型网络的 MaxRequestLength 太小有关

回答 2 投票 0

与 Windows Identity Foundation 集成基于声明的授权

我正在尝试评估是否使用经典的基于主体的授权与 IdentityModel 授权。最近好像微软在推荐后者,但我还没看够......

回答 1 投票 0

企业服务总线和消息代理

我想开始了解 WCF,但说实话,在此之前我想了解更多有关 SOA 的总体知识。 我不太理解“企业服务总线”的概念,并且......

回答 3 投票 0

.Net 6 通过通道工厂连接到 WCF Soap 服务。现在效果很好。给出有关响应标头不符合的错误

正如您在图片中看到的那样,我们确实从肥皂服务中得到了良好的请求和响应 但在我们的休息服务中,我们使用带有 Swagger 的 Open Api 规范,并且我们调用...

回答 1 投票 0

“找不到入口点”使用从 WSDL 文件生成的类时出错

我们正在尝试在 .NET Core Web 应用程序中使用第三方的 SOAP API。我们尝试了两种方法来获取从他们提供给我们的 WSDL 文件生成的类。 在 Visual Studio 中使用 WCF 使用 svcu...

回答 1 投票 0

WCF 方法被调用两次

我有一个将数据返回到桌面应用程序的网络服务。我遇到的问题是,当网络服务返回少量数据时,一切正常,但是当数据量很大时......

回答 7 投票 0

如果我仅添加到合同中,是否需要更新 WCF 服务引用?

我有一个旧的 WCF 服务项目(在 .NET Framework 4.8 上),以及一个使用它的客户端。我需要使用新参数扩展服务方法。问题是,还有其他客户正在使用这个

回答 1 投票 0

向 WCF 休息端点发送请求的 413 http 响应

我创建了一个简单的 WCF 休息端点并将其部署到在 IIS 下运行的 Sharepoint - 80。 该服务接受带有 JSON 内容的 POST 请求。当 post 请求的内容不存在时,它工作正常

回答 1 投票 0

我的 ssrs 报告生成的瓶颈是什么?

通过 .NET 控制台应用程序,我尝试将相同的 SSRS 报告从 SQL Server 报表服务器呈现为 PDF 数百次,但使用不同的参数。每个报告的大小约为 1 MB。 ...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.