我试图在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)
(我删除了静态文件处理程序.)
该网站使用经典管道以使用模拟.
我正在尝试从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但是我已经挂了这一步.
我试图从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) 我找不到要用于[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指令或程序集引用?)
我没有使用正确的命名空间吗?
我正在测试一些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
可能是什么导致了这个?
当我尝试在Windows 8机器上的IIS上提供WCF服务时,我得到了众所周知的错误
由于扩展配置,无法提供您请求的页面.如果页面是脚本,请添加处理程序.如果要下载文件,请添加MIME映射.
旧的工作是运行,aspnet_regiis -i但这个命令似乎已在Windows 8中被弃用,产生响应This option is not supported on this version of the operating system. (...).
会有什么工作?
(我已经成功启用了常规aspx页面,因此大多数IIS配置看起来都很健康.)
我构建了一个包含WCF服务契约和Silverlight控件的Web应用程序,该控件调用该WCF服务.在我的开发和测试服务器上它运行良好.
当我部署到我们的实时服务器并运行应用程序时,我得到一个类型的异常,该异常System.ServiceModel.ServiceActivationException表明由于编译期间的异常而无法激活该服务.例外是:
此集合已包含方案http的地址.此集合中每个方案最多只能有一个地址.
我读到如果网站有多个主机头,则可能抛出此异常,这在我们的实时服务器上是正确的.显然,IIS中托管的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端点???
我是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).
你有没有遇到过同样的情况?我很乐意看到每一条建议.
我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 ×10
c# ×4
.net ×2
asp.net ×2
datacontract ×2
.net-4.5 ×1
datamember ×1
guid ×1
iis ×1
iis-8 ×1
iis-8.5 ×1
json ×1
wcf-web-api ×1
web-services ×1
wif ×1
windows-8 ×1