标签: wcf

IIS8上的WCF;*.svc处理程序映射不起作用

我试图在2012年版本8400上运行IIS8中运行的wcf服务.

在安装web角色时,没有像2008年那样找到wcf的东西(3.51以下).

安装时svc处理程序映射丢失了,所以我做了一个:

%windir%\Microsoft.NET\Framework\v3.0\WindowsCommunication Foundation\ServiceModelReg.exe –i
Run Code Online (Sandbox Code Playgroud)

现在处理程序映射就在那里,但我仍然得到:

The resource you are looking for does not have a handler associated with it.
Run Code Online (Sandbox Code Playgroud)

(我删除了静态文件处理程序.)

该网站使用经典管道以使用模拟.

asp.net wcf iis-8 iis-8.5

264
推荐指数
6
解决办法
20万
查看次数

使用HttpClient从Web API发布JsonObject

我正在尝试从Web API发布一个JsonObject使用HttpClient.我不太确定如何解决这个问题,并且在示例代码方面找不到多少内容.

这是我到目前为止所拥有的:

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("", ???);
Run Code Online (Sandbox Code Playgroud)

我想我需要把我JsonObject当成一个StreamContent但是我已经挂了这一步.

c# asp.net wcf wcf-web-api asp.net-web-api

259
推荐指数
5
解决办法
29万
查看次数

如何从WCF服务返回干净的JSON?

我试图从WCF服务返回一些JSON.此服务只是从我的数据库返回一些内容.我可以得到数据.但是,我担心我的JSON格式.目前,返回的JSON格式如下:

{"d":"[{\"Age\":35,\"FirstName\":\"Peyton\",\"LastName\":\"Manning\"},{\"Age\":31,\"FirstName\":\"Drew\",\"LastName\":\"Brees\"},{\"Age\":29,\"FirstName\":\"Tony\",\"LastName\":\"Romo\"}]"} 
Run Code Online (Sandbox Code Playgroud)

实际上,我希望我的JSON格式尽可能干净.我相信(我可能不正确),以干净的JSON表示的相同结果集合应该如下所示:

[{"Age":35,"FirstName":"Peyton","LastName":"Manning"},{"Age":31,"FirstName":"Drew","LastName":"Brees"},{"Age":29,"FirstName":"Tony","LastName":"Romo"}]
Run Code Online (Sandbox Code Playgroud)

我不知道"d"来自哪里.我也不知道为什么要插入转义字符.我的实体如下所示:

[DataContract]
public class Person
{
    [DataMember]
    public string FirstName { get; set; }

    [DataMember]
    public string LastName { get; set; }

    [DataMember]
    public int Age { get; set; }

    public Person(string firstName, string lastName, int age)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Age = age;
    }
}
Run Code Online (Sandbox Code Playgroud)

负责返回内容的服务定义为:

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService
{
    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public string GetResults()
    {
        List<Person> results = new List<Person>();
        results.Add(new Person("Peyton", "Manning", …
Run Code Online (Sandbox Code Playgroud)

wcf json

230
推荐指数
4
解决办法
22万
查看次数

[DataContract]的命名空间

我找不到要用于[DataContract][DataMember]元素的命名空间.根据我发现的,似乎添加以下内容应该足够了,但在我的情况下它不是.

using System;
using System.Runtime.Serialization;
Run Code Online (Sandbox Code Playgroud)

这是我的代码片段:

using System;
using System.Runtime.Serialization;

namespace MyNamespace {

    [DataContract]
    public class Tuple<T1, T2> {
            // A custom implementation of a Tuple
            //...
            //...
        }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

找不到类型或命名空间名称'DataContract'(您是否缺少using指令或程序集引用?)

我没有使用正确的命名空间吗?

c# wcf datacontract

229
推荐指数
4
解决办法
20万
查看次数

Guid全是0(零)?

我正在测试一些WCF服务,它们来回传送带有Guids的对象.在我的网络应用程序测试代码中,我正在执行以下操作:

var responseObject = proxy.CallService(new RequestObject
{
    Data = "misc. data",
    Guid = new Guid()
});
Run Code Online (Sandbox Code Playgroud)

出于某种原因,对新Guid()的调用是生成Guids,其全部为0(零),如下所示:

00000000-0000-0000-0000-000000000000

可能是什么导致了这个?

.net c# wcf web-services guid

224
推荐指数
6
解决办法
9万
查看次数

无法在Windows 8上的IIS中提供WCF服务

当我尝试在Windows 8机器上的IIS上提供WCF服务时,我得到了众所周知的错误

由于扩展配置,无法提供您请求的页面.如果页面是脚本,请添加处理程序.如果要下载文件,请添加MIME映射.

旧的工作是运行,aspnet_regiis -i但这个命令似乎已在Windows 8中被弃用,产生响应This option is not supported on this version of the operating system. (...).

会有什么工作?

(我已经成功启用了常规aspx页面,因此大多数IIS配置看起来都很健康.)

iis wcf windows-8

195
推荐指数
4
解决办法
13万
查看次数

WCF服务启动错误"此集合已包含带有方案http的地址"

我构建了一个包含WCF服务契约和Silverlight控件的Web应用程序,该控件调用该WCF服务.在我的开发和测试服务器上它运行良好.

当我部署到我们的实时服务器并运行应用程序时,我得到一个类型的异常,该异常System.ServiceModel.ServiceActivationException表明由于编译期间的异常而无法激活该服务.例外是:

此集合已包含方案http的地址.此集合中每个方案最多只能有一个地址.

我读到如果网站有多个主机头,则可能抛出此异常,这在我们的实时服务器上是正确的.显然,IIS中托管的WCF服务只能有一个基地址.我该如何解决这个问题?

.net wcf

181
推荐指数
5
解决办法
15万
查看次数

Catch-22防止WIF保证流式TCP WCF服务; 毁了我的圣诞节,心理健康

我需要使用WIF保护流式WCF net.tcp服务端点.它应该对我们的令牌服务器验证传入呼叫.该服务是流式传输的,因为它旨在传输大量数据.

这似乎是不可能的. 如果我无法绕过捕获物,我的圣诞节将被毁掉,我会在阴沟里喝水,而快乐的购物者则会越过我缓慢冷却的身体.手提箱严重,你们.

为什么这不可能?这是Catch-22.

在客户端上,我需要使用我从令牌服务器获取的GenericXmlSecurityToken创建一个通道.没问题.

// people around here hate the Framework Design Guidelines.
var token = Authentication.Current._Token;
var service = base.ChannelFactory.CreateChannelWithIssuedToken(token);
return service.Derp();
Run Code Online (Sandbox Code Playgroud)

我说"没问题"吗?Problemo.事实上,NullReferenceException风格问题.

"兄弟,"我问框架,"你甚至无效检查吗?" 框架是沉默的,所以我拆开并发现了

((IChannel)(object)tChannel).
    GetProperty<ChannelParameterCollection>().
    Add(federatedClientCredentialsParameter);
Run Code Online (Sandbox Code Playgroud)

是异常的来源,并且GetProperty呼叫正在返回null.那么,WTF?事实证明,如果我打开Message安全性并将客户端凭据类型设置为,IssuedToken那么此属性现在存在于ClientFactory(protip:IChannel中没有"SetProperty"等效,即混蛋).

<binding name="OMGWTFLOL22" transferMode="Streamed" >
    <security mode="Message">
        <message clientCredentialType="IssuedToken"/>
    </security>
</binding>
Run Code Online (Sandbox Code Playgroud)

甜.没有更多的NRE.然而,现在我的客户在出生时出现了故障(仍然爱他,所以).通过WCF诊断进行挖掘(protip:让你的最坏的敌人在击碎它们并在你面前驾驶它们之前做到这一点,但在享受他们的女人和孩子的悲伤之前),我看到它是因为服务器和客户端之间的安全性不匹配.

'net.tcp:// localhost:49627/MyService'不支持请求的升级.这可能是由于绑定不匹配(例如在客户端而不是在服务器上启用安全性).

检查主机的诊断(再次:压碎,驱动,读取日志,享受哀叹),我看到这是真的

协议类型application/ssl-tls已发送到不支持该类型升级的服务.

"好吧,自我,"我说,"我只是打开主机上的Message安全性!" 我做到了. 如果你想知道它的样子,它就是客户端配置的精确副本.抬头.

结果: Kaboom.

绑定('NetTcpBinding',' http://tempuri.org/ ')支持不能与消息级安全性一起配置的流.考虑选择不同的传输模式或选择传输级别安全性.

因此,我的主机不能通过令牌进行流式传输和保护.第二十二条军规.

tl; dr:如何使用WIF保护流式net.tcp WCF端点???

c# wcf nettcpbinding wif .net-4.5

181
推荐指数
1
解决办法
5269
查看次数

HTTP无法注册URL http:// +:8000/HelloWCF /.您的进程没有此命名空间的访问权限

我是WCF的初学者,但试图改善我的经验.在第一步,我遇到了问题.我创建了最简单的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();

            Console.WriteLine("To continue press ENTER");

            serviceHost.Close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那将是通过控制台给我一个号码的服务.但调试给我例外:(而不是数字:))

HTTP无法注册URL http:// +:8000/HelloWCF /.您的进程没有此命名空间的访问权限(有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=70353).

你有没有遇到过同样的情况?我很乐意看到每一条建议.

wcf

176
推荐指数
8
解决办法
15万
查看次数

何时使用DataContract和DataMember属性?

DataContract对WCF中的属性非常困惑.据我所知,它用于序列化类似用户定义的类型.我写了一个类,这个类在客户端公开.

[DataContract]
public class Contact
{
    [DataMember]
    public int Roll { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Address { get; set; }

    [DataMember]
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我删除DataContract并且DataMember它也工作正常.我无法理解为什么它正常工作.谁能告诉我实际用途是DataContract什么?

我的服务合同是这样的

[ServiceContract]    
public interface IRestServiceImpl
{
    [OperationContract]        
    Contact XmlData(string id);      
}
Run Code Online (Sandbox Code Playgroud)

wcf datacontract datamember datacontractserializer

171
推荐指数
3
解决办法
12万
查看次数