我正在尝试将以下代码片段用于Mono控制台应用程序,并作为MonoTouch应用程序的最终目标。使用Windows控制台应用程序,代码在VS2008下运行正常。 当它在Mac上作为Mono控制台应用程序运行时,我得到了
未处理的异常:System.NotImplementedException:请求的 功能未实现。在 System.ServiceModel.Channels.SecurityBindingElement.CanBuildChannelFactory [IDuplexChannel] (System.ServiceModel.Channels.BindingContext context)[0x00000] in :0
在MonoTouch中,我收到此错误:
未处理的异常:System.ServiceModel.FaultException:错误 验证邮件的安全性时发生。在 System.ServiceModel.MonoInternal.ClientRuntimeChannel.Request (System.ServiceModel.Description.OperationDescription od, System.Object []参数)[0x00188] in /Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientRuntimeChannel.cs:545
有人可能会出现什么问题吗?为了简单起见,没有涉及app.config。
using System;
using MonoAPI3.BLAPI3Session;
using Brainloop.ServiceLibrary.DataModel;
using System.ComponentModel;
using System.ServiceModel;
public static void Main()
{
System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => { return true; };
var oClient = new SessionServiceClient( new BasicHttpBinding( BasicHttpSecurityMode.TransportWithMessageCredential )
{
CloseTimeout = new TimeSpan( 0, 0, 10 ),
OpenTimeout = new TimeSpan( 0, 1, 0 ),
ReceiveTimeout = new TimeSpan( 0, 1, 0 ),
SendTimeout = new TimeSpan( 0, 1, 0 ),
AllowCookies = false,
BypassProxyOnLocal = false,
HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
MaxBufferSize = 65536,
MaxBufferPoolSize = 524288,
MaxReceivedMessageSize = 65536,
MessageEncoding = WSMessageEncoding.Text,
TextEncoding = System.Text.Encoding.UTF8,
TransferMode = TransferMode.Buffered,
UseDefaultWebProxy = true,
ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
{
MaxDepth = 32,
MaxStringContentLength = 8192,
MaxArrayLength = 16384,
MaxBytesPerRead = 4096,
MaxNameTableCharCount = 16384
}
},
new EndpointAddress( "https://service.myserver.com/Service/V3/Session.svc" ) );
oClient.ClientCredentials.UserName.UserName = "user@domain.com";
oClient.ClientCredentials.UserName.Password = "pwd";
SessionInfo oInfo = oClient.StartSession();
Console.WriteLine( "SESSION HASH: " + oInfo.SessionHash );
}
答案 0 :(得分:2)
问题的代码行是:
BasicHttpSecurityMode.TransportWithMessageCredential
Mono不支持WS-Security。基本上,BasicHttpSecurityMode上有很多选项无法使用。如果您需要Message Credentials,那么我担心这些代码无法正常工作。这是一个相关链接:
http://lists.ximian.com/pipermail/mono-bugs/2010-January/096972.html
答案 1 :(得分:0)
我建议您从this link下载附件。
我成功地让它发挥作用。我在 IIS 7 下的Windows计算机上将Web项目设置为基本身份验证, .NET授权设置为特定用户。 然后我就在我的Mac机器上运行MonoDevelop下的控制台应用程序,它没有任何错误。
我可以在Mono控制台应用程序和MonoTouch应用程序之间看到的唯一区别是这一行:
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
在MonoTouch应用程序中,不会生成binding.Security.Transport属性。