【发布时间】:2010-09-05 12:12:53
【问题描述】:
我正在尝试为服务生成 OData 代理:http://services.odata.org/Northwind/Northwind.svc/$metadata
我正在使用 System.Data.Services.Design.EntityClassGenerator 生成 OData 代理。
当我实例化 EntityClassGenerator 并调用 GenerateCode 时,输出没有错误。但是生成的代理代码中没有代码。
相同的代码适用于我自己的服务。但是当我将它指向任何外部服务时,EntityClassGenerator 不起作用。
代码如下:
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(metadataEndpoint);
webRequest.Method = "GET";
webRequest.ContentType = "text/xml;encoding='utf-8";
webRequest.Proxy = (proxy != null) ? proxy : WebRequest.DefaultWebProxy;
using (WebResponse response = webRequest.GetResponse())
{
string xml = string.Empty;
XmlReaderSettings settings = new XmlReaderSettings();
using (TextReader reader = new StreamReader(response.GetResponseStream()))
{
xml = reader.ReadToEnd();
using (XmlTextReader sourceReader = new XmlTextReader(reader))
{
using (StringWriter targetWriter = new StringWriter())
{
// Generate the OData End point proxy.
EntityClassGenerator entityGenerator = new EntityClassGenerator(LanguageOption.GenerateCSharpCode);
entityGenerator.OnPropertyGenerated += new EventHandler<PropertyGeneratedEventArgs>(entityGenerator_OnPropertyGenerated);
IList<System.Data.Metadata.Edm.EdmSchemaError> errors = entityGenerator.GenerateCode(sourceReader, targetWriter, namespacename);
entityGenerator.OnPropertyGenerated -= new EventHandler<PropertyGeneratedEventArgs>(entityGenerator_OnPropertyGenerated);
odataProxyCode = targetWriter.ToString();
}
}
}
}
【问题讨论】:
-
如何打开作为 GenerateCode 调用输入的 XmlReader?
-
我已经更新了原帖中的源代码。从文本阅读器创建 XmlTextReader。之前我是从 GetResponseStream 获得的流创建 XmlTextReader。
标签: odata