我想从iPhone上使用.NET编写的web服务,它使用wsdl中的NetTcpBinding显示.是否可以从iphone中使用除BasicHttpBinding之外的web服务?如果可能的话,我该如何消费呢?
JuvalLöwy的"编程WCF服务"一书包含一个"WCF编码标准"附录,其中附有WCF服务的一般设计指南.
其中一个指导原则是避免类似属性的操作:
//Avoid property-like operations:
[ServiceContract]
interface IMyContract
{
[OperationContract]
string GetName();
[OperationContract]
void SetName(string name);
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下string GetName();手术有什么问题吗?如果字符串值是我需要的一个操作怎么办?
我有一个在我的本地机器上工作正常的WCF服务,以及一个从jQuery使用AJAX的客户端,一切都在本地使用url中的localhost工作正常,我试图用我的机器名替换localhost,然后在本地运行,但是请求不起作用并导致js中的calback函数响应错误.
响应没有任何含义信息(readystate = 4,error)
我的WCF服务函数返回类型是Dictionary(Of String,String).所以我必须将我的数据集转换为字典.
这是我的数据集示例.
帐户帐户名称
abc abc1
abc abc2
abc abc3
xyz xyz1
xyz xyz2
xyz xyz3
xyz xyz4
pqr pqr1
pqr pqr2
pqr pqr3
pqr pqr4
pqr pqr5
pqr pqr6
使用LINQ或不使用LINQ,如何将数据集转换为字典(字符串,字符串)
此致,RN
我会说,我已经在.NET开发了多年,和VB/BASIC对于之前多年前言本,但我的背景主要是在桌面应用程序和系统接口 - 我仍然很新的一切这个网络应用程序的东西,所以如果这是一个愚蠢的问题,我在前面道歉.
也就是说,这是我的问题:当您在ASPX页面中创建对象并将其存储在缓存中时,如何从驻留在同一应用程序中的ASMX Web服务访问它?
进一步说明:我有一个Web应用程序,其中包括ASPX页面,ASMX Web服务和由两个对象类组成的类库.当用户登录到应用程序时,他们会配置一些设置,并创建对象并将其存储在system.Web.Caching.Cache对象中.然后在下一页上将自定义对象从缓存中拉出,然后用户对Web服务进行AJAX调用(通过jQuery)以检索一些数据.
问题是在Web服务响应中,我需要根据存储在Web应用程序缓存中的用户创建对象的内容来解析返回的数据.但是,我找不到任何方法从Web服务内部访问缓存的对象.
我有一种潜在的怀疑,即可以将我的自定义.NET对象序列化为JSON对象,并通过AJAX调用将它们传递给Web服务进行反序列化,但坦率地说,我甚至不知道如何开始.加上对象是潜在的30 - 40K的大小和AJAX调用正在取得频繁,每3秒钟一次,所以我真的想避免将所有这些额外的数据与每个调用的开销,尤其是因为数据我需要的是已经存在于Web服务所在的应用程序的内存中.
因此,我再次问:当您在ASPX页面中创建对象并将其存储在缓存中时,如何从驻留在同一应用程序中的ASMX Web服务访问它?
这有意义吗?我疯了吗?缺少明显的东西?任何人都可以提供的见解将非常受到高度赞赏.谢谢!
我对MEX端点感到困惑.如果我错了,请纠正我.有两种方法可以公开元数据.一个有MEX端点,另一个有<serviceMetadata httpGetEnabled="true" />.第一个将使用WS-MetadataExchange公开元数据,第二个将使用WSDL.
我有以下问题:
提前致谢.
我有课:
[DataContract]
public class MediaItem : Video
{
//used to protect calling api from the incorrectly named video
}
[DataContract]
public class SecureMediaItem : MediaItem
{
[DataMember]
public PlayerEmbedToken Token;
}
Run Code Online (Sandbox Code Playgroud)
然后我有以下代码:
List<MediaItem> dummyItems = new List<MediaItem>();
//cast the media item into a secure media item
SecureMediaItem retItem = (SecureMediaItem)dummyItems[mediaId];
//TODO: put in the Admin ID
retItem.Token.UserId = 1;
retItem.Token.IpAddress = VLSCore2.VlsSecurity.ParseIpFromString(ipAddress);
retItem.Token.UniquePlayerRef = Guid.NewGuid().ToString();
return retItem;
Run Code Online (Sandbox Code Playgroud)
但是我得到一个错误:
无法将类型为"VLSCore2.Entities.Security.Api.MediaItem"的对象强制转换为"VLSCore2.Entities.Security.Api.SecureMediaItem".
这只是一个广泛的演员,不是吗?像DataContract属性那样停止它的东西?
我有一个Web服务,它使用对System.ServiceModel.Dispatcher.SerializeReply消息的调用(特别是MultiplexingDispatchMessageFormatter实现).当我进行此调用时,我收到一个"未找到密钥"异常,我追溯到System.ServiceModel.Dispatcher.MultiplexingDispatchMessageFormatter中的一行,它正在尝试根据键获取"defaultContentType".
不幸的是我无法看到密钥是什么,但defaultContentType集合似乎没有任何项目.
要使SerializeReply正常工作,我需要做什么?
代码:
public System.ServiceModel.Channels.Message SerializeReply(System.ServiceModel.Channels.MessageVersion messageVersion, object[] parameters, object result)
{
System.Web.HttpRequest requestMessage = System.Web.HttpContext.Current.Request;
string format = requestMessage.QueryString["format"];
if (!string.IsNullOrEmpty(format) && string.Compare(format, "json", true) == 0)
{
return jsonResponseDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result);
}
//[UNRELATED CODE]
}
Run Code Online (Sandbox Code Playgroud)
这是在System.ServiceModel.Dispatcher.MultiplexingDispatchMessageFormatter中爆炸的行(键是"json",defaultContentTypes没有条目):
outgoingResponse.ContentType = this.defaultContentTypes[key];
Run Code Online (Sandbox Code Playgroud)
我得到的例外:
System.Collections.Generic.KeyNotFoundException occurred
Message=The given key was not present in the dictionary.
Source=mscorlib
StackTrace:
at System.ThrowHelper.ThrowKeyNotFoundException()
InnerException:
Run Code Online (Sandbox Code Playgroud) public interface IConsoleData
{
double GetCurrentIndicator();
}
public class IConsoleDataImpl : IConsoleData
{
public double GetCurrentIndicator()
{
return 22;
}
}
[ServiceContract]
public interface IMBClientConsole
{
[OperationContract]
IConsoleData GetData();
}
public class MBClientConsole : IMBClientConsole
{
public IConsoleData GetData()
{
return new IConsoleDataImpl();
}
}
class Log
{
public static void initialize()
{
using (ServiceHost host = new ServiceHost(typeof(MBClientConsole),
new Uri[]{
new Uri("net.pipe://localhost")
}))
{
host.AddServiceEndpoint(typeof(MBClientConsole),
new NetNamedPipeBinding(),
"PipeReverse");
host.Open();
// TODO: host.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当AddServiceEndpoint我接到电话时
合同类型Commons.MBClientConsole不归属于ServiceContractAttribute.为了定义有效的合同,必须使用ServiceContractAttribute来声明指定的类型(合同接口或服务类). …
如果有人能向我解释如何让我的程序在启动时运行,我就会徘徊?我的程序是一个C#WCF,它有一个小的WPF UI,必须在服务器上运行,我需要确保程序将在服务器重新启动时或其他任何原因启动.
我看了一下,似乎我必须使用注册表项,但我不熟悉如何使用注册表项,有人可以向我解释如何使用它.我正在使用VS2010创建一个安装程序,我想在安装时设置注册表项:)
PS我不希望应用程序成为Windows服务,我不能只将它放在用户的启动文件夹中(如果服务器重新启动并且没有人登录会导致什么?)