我正在开发一个WCF数据服务来公开数据库.我想提供对其中一个表的访问(称之为'Foo'),所以我把它放在InitializeService我的方法中DatabaseService.svc.cs:
config.SetEntitySetAccessRule("Foo", EntitySetRights.AllRead);
Run Code Online (Sandbox Code Playgroud)
但是,当服务初始化时,它会抛出一条ArgumentException消息"在实体集中找不到给定名称'Foo'."
该表肯定在.edmx文件中,该名称,大小写和拼写正确.它也在.Designer.cs文件中,如下所示:
[EdmEntityTypeAttribute(NamespaceName="FooDBModel", Name="Foo")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Foo : EntityObject
Run Code Online (Sandbox Code Playgroud)
服务类本身声明为:
public class FooDatabaseService : DataService<FooDBEntities>
Run Code Online (Sandbox Code Playgroud) 是否值得设计一个系统以期望测试账户和产品在生产中存在并且活跃,或者是否应该没有测试实体的生产数据库的污染,即使您的运输人员知道不发送任何发给"测试客户"的盒子?
我已经在规范中实现了具有test ="True"属性的消息传递协议,并想知道现代模式是否应该包含用于标记订单,帐户,事务等的元数据作为像任何其他实体一样处理的测试实体 - - 但没有钱花钱的地步.也就是说:它伪造一个假想的信用卡并伪造一个包装的货物.
预计这不会取代完全独立的测试,开发和QA数据库,但即便如此,我们也始终在生产系统中拥有着名的测试SKU和测试客户.无害?
我看到这个异常消息来自XslCompiledTransform.Transform(),但在处理异常后,XSL转换似乎仍然成功.完整的异常消息是:
处于状态EndRootElement的Token Text将导致XML文档无效.如果要编写XML片段,请确保将ConformanceLevel设置设置为ConformanceLevel.Fragment或ConformanceLevel.Auto.
样式表如下所示:
<xsl:stylesheet version="1.0" xmlns:ext="ext:extensions" xmlns:f="http://schemas.foo.com/FOAMSchema">
<xsl:template match="/Root/Documents/PO/DROPSHIP">
<Transactions>
<Transaction>
<f:partnerTransmission>
<transmission_id>
<xsl:value-of select="ext:NewGUID()"/>
</transmission_id>
<partner_code>
<xsl:value-of select="/Root/@PartnerCode"/>
</partner_code>
<control_nbr>
<xsl:value-of select="@GS_CNTRL_NUM"/>
</control_nbr>
<creationTime>
<xsl:value-of select="ext:ConvertToStandardDateTime(@DATE,@TIME,'ISO8601Basic')"/>
</creationTime>
<direction>I</direction>
<messageCount>
<xsl:value-of select="count(ORDERS/ORDER)"/>
</messageCount>
<syntax>XML</syntax>
<format>BARBAZ</format>
<deliveryMethod>FTP</deliveryMethod>
</f:partnerTransmission>
</Transaction>
</Transactions>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
生成的XML如下所示:
<Transactions xmlns="http://schemas.foo.com/IntegrationProfile" xmlns:ext="ext:extensions">
<Transaction>
<f:partnerTransmission xmlns:f="http://schemas.foo.com/FOAMSchema">
<transmission_id>a5e0ec76-6c24-426b-9eb5-aef9c45d913f</transmission_id>
<partner_code>VN000033</partner_code>
<control_nbr>650</control_nbr>
<creationTime>9/27/2008 12:51:00 AM</creationTime>
<direction>I</direction>
<messageCount>2</messageCount>
<syntax>XML</syntax>
<format>BARBAZ</format>
<deliveryMethod>FTP</deliveryMethod>
</f:partnerTransmission>
</Transaction>
</Transactions>
Run Code Online (Sandbox Code Playgroud)
以上是我捕获并忽略异常时获得的内容.
我一直无法找到设置ConformanceLevel的方法(属性是只读的),但同时我也不认为这里应该存在问题.
我的输出是否构成XML片段?我在样式表中遗漏了什么吗?
有没有办法将 MethodBody(或其他反射技术)转换为 System.Linq.Expressions.Expression 树?
非对称加密密钥是否在主要密钥容器格式之间从根本上可以互换?例如,我可以将X.509密钥文件转换为PGP或OpenGPG密钥文件吗?
并且 - 假设答案是肯定的 - 以任何格式保留一个密钥对并转换成适合该场合的容器文件格式是"安全中立"吗?
我有点厌倦为X.509,OpenGPG和SSH维护这么多密钥对,当它们都是RSA的核心时.
我正在构建一个编写/编辑XML文件的工具,我希望能够使用另一个XML文件中定义的模板片段填充它.
例如,该工具有一个"Add FooBarBaz Element"按钮,它为正在创建的新文档添加一个元素,我想通过从模板中复制它来添加FooBarBaz.
或者说这是我的模板文件:
<Templates>
<FooBarBaz Attribute="Value">
<ChildElement/>
</FooBarBaz>
</Templates>
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用.GetElementsByTagName("FooBarBaz")获取模板片段,并且我希望能够使用.AppendChild(templateNode)将其注入到新文档中.
但问题是,即使您使用.Clone()或.CloneNode(),也无法将XmlNode从一个XmlDocument复制到另一个XmlDocument,因为AppendChild()会抛出一个异常,说明该模板元素属于另一个上下文.
有没有一种简单的方法可以在System.Xml.XmlDocuments之间复制System.Xml.XmlNode?
我将照片存储为我的Core Data实体中的Transformable属性,这是要在iPhone的内存中加载的大量数据.如果我想要一个列出所有实体(可能是数百或数千)的TableView,但只需要显示它们的标题,Core Data是否仍会获取每张照片并在需要之前将其存储在RAM中?
我想要做的是只有当用户选择要在另一个ViewController中查看的记录时,才能对照片进行"lazy-fetch".什么是最节省内存的方法呢?
我想从元素的属性绑定到只能与XPath可达的值.
该元素是从某些XML填充的ComboBox,其属性为SelectedItem.SelectedItem指向一个XML元素,我想绑定到子元素的值,可以通过XPath来访问它.
到目前为止,XAML看起来像这样:
<StackPanel Orientation="Vertical" Margin="10,10">
<StackPanel Orientation="Horizontal">
<Label>Partner</Label>
<ComboBox Name="Partner" Margin="10,0"
ItemsSource="{Binding XPath=/Root/Tables/Partners/row}"
ItemTemplate="{StaticResource Partner}"/>
</StackPanel>
<Button Margin="25,15" Name="Submit" Width="100" Height="30" IsDefault="True"
CommandParameter="{Binding ElementName=Partner, Path=SelectedItem}">
Okay
</Button>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
源XML看起来像这样:
<Root>
<Tables>
<Partners>
<row>
<PartnerID>1</PartnerID>
<Name>FooBar.Com</Name>
</row>
<row>
.
.
.
</row>
</Partners>
</Tables>
</Root>
Run Code Online (Sandbox Code Playgroud)
我的问题是Button的CommandParameter绑定到XmlElement,其中包含太多信息.我想让CommandParameter引用一个子元素,有点像我可以用"XPath = PartnerID"指定一个额外的向下钻取来返回我真正感兴趣的整数值.
C#编译器插入特殊的字符文字,如\ t为tab,\n为换行等.但是有内置的C#或.Net函数可以在运行时插入它们吗?
例如,在运行时我读取了一个文本分隔文件格式的配置,可能是这样的:
Delimiter: \t
LineEnding: \r\n
Run Code Online (Sandbox Code Playgroud)
现在我唯一能想到的就是读取字符串然后用编译器插值字符串执行Replace():
Delimiter = Delimiter.Replace(@"\n", "\n").Replace(@"\r", "\r");
Run Code Online (Sandbox Code Playgroud) 我想将端点配置存储在.config文件中,但能够在运行时修改基址.EG:这些是我在app.config中的端点定义:
<endpoint address="net.tcp://BASEURI:1001/FooService/"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_Common"
contract="ServiceContracts.MyService"
name="FooService" />
<endpoint address="net.tcp://BASEURI:1002/BarService/"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_Special"
contract="ServiceContracts.MyService"
name="BarService" />
Run Code Online (Sandbox Code Playgroud)
每个服务使用相同的合同(ServiceContracts.MyService),但生活在不同的端口,不同的路径,有时是不同的绑定配置.
我希望能够以编程方式提取地址"net.tcp:// BASEURI/FooService /",将"BASEURI"替换为服务器的地址,然后在创建客户端连接时将其作为地址传递给DuplexChannelFactory.例如:
string ServiceToUse = "FooService";
var endpointConfig = SomeFunctionThatGetsTheConfig(ServiceToUse);
string trueAddress = endpointConfig.Address.Replace("BASEURI", "192.168.0.1");
DuplexChannelFactory<FooService> client =
new DuplexChannelFactory<FooService>(ServiceToUse, new EndpointAddress(trueAddress));
Run Code Online (Sandbox Code Playgroud)
我知道客户端端点不支持服务端点的<baseAddress>功能,但我的目的是以某种方式解决这个问题,以便我不必知道URI的其余部分或绑定是什么.
注意:我没有使用Proxy类,我直接使用DuplexChannelFactory.