我已多次尝试让我的WCF服务公开MetaData.相反,我一直保持例外:
在服务SecurityBroker实现的合同列表中找不到合同名称"IMetadataExchange" .将ServiceMetadataBehavior直接添加到配置文件或ServiceHost以启用对此合同的支持.
...使用IE手动浏览服务时.
(我假设这与我的客户端应用程序无法生成服务引用的原因相同.婴儿步骤和所有)
然而我的web.config看起来还不错:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
<endpointBehaviors>
<behavior name="webHttpEnablingBehaviour">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="webHttpEnablingBehaviour">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="IWW.MIGTurbo2.WCF.Security.SecurityBroker">
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="default"
contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker"
behaviorConfiguration="webHttpEnablingBehaviour">
</endpoint>
</service>
</services>
<client />
<bindings>
<webHttpBinding>
<binding name="default" />
</webHttpBinding>
</bindings>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
所以我的meetadataExchange合约定义为mex很好,并且我已经看到了.我错过了什么愚蠢的东西?
编辑
如果有用,我的服务定义如下所示:
<%@ ServiceHost Language="C#" Debug="true" Service="IWW.MIGTurbo2.WCF.Security.SecurityBroker" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>
Run Code Online (Sandbox Code Playgroud) 我通过将每条记录推送到验证阶段,然后将其放入数据库来处理记录。验证步骤之一需要检查某些列是否是日期。我使用 DateTime.TryParse(s, out DateTime) 执行此操作,假设这将使用运行进程的计算机上配置的区域设置。在我的本地计算机上,这是一个在 Visual Studio 的命令行工具中运行的包装类(为了便于调试)。因此,根据我的 Windows 7 开发计算机上的 en-GB 设置,13/01/2010 被格式化为 2010 年 1 月 13 日。
将其推送到我们的测试服务器(Windows Server 2008 R2)上时,该包装类在 Window 服务(在 LocalSystem 帐户下)内运行。完全相同的代码,我将其设计为服务只是一个薄包装。然而,经过多次调试后,服务器似乎将 13/01/2010 解析为 en-US,因此失败。尽管区域设置被设置为 en-GB,但仍然如此。(见截图)

请注意,这是在到达 SQL Server 之前,因此这不是此问题的一部分。
在与此斗争之后,我通过使用下面的代码并将所需的格式设置为 en-GB 来强制这种情况。
Culture = CultureInfo.CreateSpecificCulture("en-GB");
DateTimeStyles dateTimeStyles = DateTimeStyles.None;
DateTime dt;
bool pass = DateTime.TryParse(s,Culture,dateTimeStyles, out dt);
Run Code Online (Sandbox Code Playgroud)
现在这有效了。我的问题是,为什么在本地系统下运行的 Windows 服务会假定 en-US 而不是 en-GB?
我有一个具有"一般"路径结构的站点,以及一个额外的"翻译"区域.所以在顶层,你有类似的东西:
在Translate区域内,我有:
所有这些工作.
但是,只要我在现有结构中添加另一个控制器,例如.定义......
或发音......
我得到的只是404.
我所在地区的路由配置如下:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Translate_direct",
"Translate/{controller}/{action}",
new { action = "Index", controller = "Default", }
);
context.MapRoute(
"Translate_default",
"Translate/{toLanguageCode}/{query}/{fromLanguageCode}/{controller}/{section}/{action}/{id}",
new { action = "Index", controller="Default", id = UrlParameter.Optional, section=UrlParameter.Optional }
);
}
Run Code Online (Sandbox Code Playgroud)
我安装了Phil Haack的RouteDebugger并得到了以下结果:

因此它似乎与Controller和Action相匹配,但我得到的是404.
为了完整性和保证,还显示了我的"MVC"文件结构:

我显然错过了一些显而易见的东西,但不确定是什么......?
更新:
似乎我的命名空间以某种方式涉及.
我的TranslateAreaRegistration类的命名空间为Taggloo.Web.Client.Areas.Translate,但我的PronunciationController的命名空间为*Taggloo.Web.**Mvc.**Client.Areas.Translate.Controllers*
似乎我的命名空间中的错误导致两者不同(TranslateAreRegistration类也应该在Taggloo.Web.Mvc.Client.Areas.Translate命名空间中)是问题.我尝试将它们都制作成Taggloo.Web.Mvc ....但这不起作用.我不情愿地将它们都设置为Taggloo.Web.Client ......而现在它可以工作了.
所以不是一个解决方案,一个解决方法,尽管环顾四周,我仍然没有明白为什么.
我们为Outlook编写了一个附加组件,用于将电子邮件存入我们的CRM系统.在此过程中,它将Outlook消息ID作为UserField保存在消息本身上.
例如.
currentUserProperty = Constants.APPLICATION_NAME + "EntryID";
mailItem.UserProperties.Add(currentUserProperty,
Microsoft.Office.Interop.Outlook.OlUserPropertyType.olText,
Missing.Value,
Missing.Value).Value = entryId;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是一个HUUUGGEE号码,很像:
"00000000D502D779150E2F4580B1AADDF04ECDA6070097EF5A1237597748A4B4F9BFF540020800000006E9E4000068BB5B6DFC36924FAEC709A17D056583000002DE0E350000"
问题是,当用户打印消息时,Outlook坚持要包含此字段(在From/To下面)并且因为它没有空格,所以无法包装ID并压缩A4页面直到它可以水平放置.这会产生极小的电子邮件打印输出.
有什么方法可以纠正这个吗?我曾想过用一个空格分隔的覆盖字段OriginalEntryID(导致问题的那个),但是我从COM层得到一个异常.我的下一步是尝试抑制Outlook上此和其他用户定义字段的输出静止.
有谁知道如何实现这一目标?
我们使用svn,我将开始在家工作.我有想法带上我的笔记本电脑,检查项目并将其带回家,在周一返回并撤销该过程.
但它是一个笨重的笔记本电脑,我不喜欢骑在背上工作.
是否可以改为:
这样,当我在办公室/家里工作时,所有东西都被记录下来并加盖印章,我不需要拉着我沉重的笔记本电脑,源控制仍然保持一致.
这是正确的方法吗?在我进入另一个SVN疼痛世界之前检查一下.
我们正在使用SVN,VisualSVN Server,Visual SVN客户端和TortoiseSVN.
可能重复:
计算.NET中的每月星期
我需要计算一个月内给定日期的星期数。我之所以勇气一个月,是因为我遇到的所有示例(在这里和其他地方)都是基于年度的。基本上,我想看看什么是14/2/2010星期几(dd / MM / yyyy格式)。给定星期一的开始日期,我希望它会返回2。
在计算中我必须如何了解文化?
我正在尝试为CI /部署目的创建脚本,但遇到了问题.不幸的是,我不得不使用SQL 2000,这超出了我的舒适范围.
看起来,不支持CREATE USER ... FOR LOGIN,所以我必须使用sp_addlogin和sp_adduser.
我需要授予NT AUTHORITY\NETWORK SERVICE用户的权限:
EXEC sp_addlogin N'NT AUTHORITY\NETWORK SERVICE'
EXEC sp_adduser N'NT AUTHORITY\NETWORK SERVICE'
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为sp_addlogin调用返回错误:
'NT AUTHORITY\NETWORK SERVICE'不是有效名称,因为它包含无效字符.
那么我该如何实现呢?
我以为我理解EF,特别是在极其简单的CRUD方面,但我可能错了.
我有一个ObjectContext/Repository模式,在这种情况下是一个VatCode实体,它有一个VatRates集合.
VatCode 1 - *VatRate
我想为CRUDing提供这些实体的功能.这是在WPF应用程序中,并且正在"断开连接",因为我没有不必要地打开DB连接.我更喜欢数据库访问的输入/输出方法.这在以下集成测试中显示:
[TestMethod()]
public void AddVatRateAndSaveVatCodeTest()
{
VatCode vatCode=null;
DateTime expectedDateFrom = DateTime.Now.AddDays(1).Date;
using (SopEntities sopEntities = EntitiesFactory.Create(Properties.Resources.ConnectionString))
{
VatRepository target = new VatRepository(sopEntities);
vatCode = target.SingleOrDefault(q => q.Key == "X4");
Assert.IsNotNull(vatCode);
}
// mimick offline editing/disconnect
using (SopEntities sopEntities = EntitiesFactory.Create(Properties.Resources.ConnectionString))
{
VatRepository target = new VatRepository(sopEntities);
vatCode.VatRates.Add(new VatRate()
{
DateFrom=expectedDateFrom,
Rate=20
});
target.Attach(vatCode);
target.SaveChanges();
}
using (SopEntities sopEntities=EntitiesFactory.Create(Properties.Resources.ConnectionString))
{
VatRepository vatRepository=new VatRepository(sopEntities);
VatCode actual=vatRepository.SingleOrDefault(q=>q.Key=="X3");
Assert.IsNotNull(actual);
Assert.AreEqual(vatCode.VatRates.Count,actual.VatRates.Count);
Assert.AreEqual(expectedDateFrom,actual.VatRates.OrderBy(q=>q.DateFrom).Last().DateFrom);
}
}
Run Code Online (Sandbox Code Playgroud)
代码很简单.它检索已知的现有实体并将其分配给vatCode.然后,该实体在UI上的ViewModel中传递,并重新保存.在这个测试中,我通过打开一个新的上下文来模仿这个.这正是我在UI中的意思,所以我在这里证明了这一点.
但是,在调用vatRepository的Attach()方法时,它具有以下方法体:
public void …Run Code Online (Sandbox Code Playgroud) 我正在寻找解决我的问题的方法,但我得到的是这种情况发生的原因,而不是防止发生.
我有一个类,WorkflowActivityInstance其中有一个集合WorkflowActivityInstanceTransitions表示工作流状态的转换.转换在一个Transitions属性中映射.
因此:WorkflowActivityInstance< -WorkflowActivityInstanceTransition
我想要一个关于该对象的视图,它将给WorkflowActivityInstance状态包括它的当前状态,这将是最新的,WorkflowActivityInstanceTransition没有用户编码器在Transitions属性上执行它们自己的排序和选择.
最初,我有:
public virtual IWorkflowActivityInstanceTransition CurrentState
{
get { return Transitions.OrderBy(q => q.TransitionTimeStamp).LastOrDefault(); }
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
NHibernate.InvalidProxyTypeException:NHibernate.InvalidProxyTypeException:以下类型不能用作代理:FB.SimpleWorkflow.NHibernate.Model.WorkflowActivityInstance:方法CurrentState应为'public/protected virtual'或'protected internal virtual'.
我试图变得厚颜无耻,并将其转换为方法:
public IWorkflowActivityInstanceTransition GetCurrentState()
{
return Transitions.OrderBy(q => q.TransitionTimeStamp).LastOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个非常相似的:
NHibernate.InvalidProxyTypeException:NHibernate.InvalidProxyTypeException:以下类型不能用作代理:FB.SimpleWorkflow.NHibernate.Model.WorkflowActivityInstance:方法GetCurrentState应为'public/protected virtual'或'protected internal virtual'.
我想CurrentState在我的模型类中保持非常简单的行为,并防止NHibernate过度使用并尝试映射/代理此属性.感觉这应该只是我不想映射的属性的属性...
我怎样才能做到这一点?
谢谢
弥敦道
我们正在通过WCF公开基于服务器的API开发Silverlight客户端.
我正在尝试将我的WCF客户端代码(工作正常)从基于配置的模型移动到编程模型.这将使我能够拥有一个"root"URL,我可以在启动时应用它,而不需要安装必须维护庞大的配置文件.
不过,我正在将我的配置转换为支持Silverlight的代码.
我在下面的配置中提供了一项服务:
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CustomBinding_ISilverlightHelper">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
<extendedProtectionPolicy policyEnforcement="Never" />
</httpTransport>
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://localhost:50072/API/WCF/Silverlight/SilverlightHelper.svc"
binding="customBinding" bindingConfiguration="CustomBinding_ISilverlightHelper"
contract="API.WCF.Silverlight.ISilverlightHelper" name="CustomBinding_ISilverlightHelper" />
</client>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何创建equivelant client-config代码.目前我有:
CustomBinding customBinding = new CustomBinding();
// I see I need to do something with customBinding but the properties don't seem
// logical
// I have used BasicHttpBinding, but it just returns with "Not Found" (the service does resolve to a valid URL)
BasicHttpBinding basicHttpBinding = …Run Code Online (Sandbox Code Playgroud) 我正在进入MSBuild来处理项目的各种目标,我发现它非常灵活.(它也帮助我了解CI系统的可能性)
我需要获得项目的当前SVN修订版本,为此我编写了一个调用SubWCRev并解析输出的自定义任务.
我使用元素引用它:
<UsingTask TaskName="xxx.Elements.Build.MSBuildTasks.SubWCRev" AssemblyFile="D:\dev\xxx_presentation\Build\xxx.Elements.Build.dll">
<ParameterGroup>
<LastCommittedRevision ParameterType="System.Int" Required="False" Output="True" />
<MixedRevisionRangeMinimum ParameterType="System.Int" Required="False" Output="True" />
<MixedRevisionRangeMaximum ParameterType="System.Int" Required="False" Output="True" />
<HasLocalModifications ParameterType="System.Boolean" Required="False" Output="True" />
</ParameterGroup>
</UsingTask>
Run Code Online (Sandbox Code Playgroud)
然后我执行任务......
<Target Name="Version" BeforeTargets="BuildDatabase">
<xxx.Elements.Build.MSBuildTasks.SubWCRev WorkingCopyDir="$(ProjectDir)..">
<Output TaskParameter="LastCommittedRevision" ItemName="LastCommittedRevision" />
<Output TaskParameter="MixedRevisionRangeMinimum" ItemName="MixedRevisionRangeMinimum" />
<Output TaskParameter="MixedRevisionRangeMaximum" ItemName="MixedRevisionRangeMaximum" />
<Output TaskParameter="HasLocalModifications" ItemName="HasLocalModifications" />
</xxx.Elements.Build.MSBuildTasks.SubWCRev>
<Message Text="Revision is @(LastCommittedRevision)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
我的问题是MSBuild坚持使用TaskFactory属性,本文档说这是可选的.而且我也看到TaskFactory特别适用于内联任务,我对此并不感兴趣.
错误消息是:
必需属性"TaskFactory"在元素UsingTask中为空或缺少.
我哪里错了?
(顺便说一句,我发现MSBuild Sidekick 3非常出色并且减少了可能成为一个相当复杂的脚本的阻力.)
c# ×3
wcf ×2
asp.net-mvc ×1
culture ×1
msbuild ×1
msbuild-task ×1
nhibernate ×1
outlook ×1
silverlight ×1
sql-server ×1
svn ×1
t-sql ×1
tortoisesvn ×1