是否可以使用System.Net.WebClient发送带有一些表单数据的HTTP POST?
如果没有,是否有另一个像WebClient这样的库可以进行HTTP POST?我知道我可以使用System.Net.HttpWebRequest,但我正在寻找一些不那么冗长的东西.
希望它看起来像这样:
Using client As New TheHTTPLib
client.FormData("parm1") = "somevalue"
result = client.DownloadString(someurl, Method.POST)
End Using
Run Code Online (Sandbox Code Playgroud) 我有这个xml文件.
<movies>
<movie>
<score>8.582207</score>
<popularity>3</popularity>
<translated>true</translated>
<adult>false</adult>
<language>en</language>
<original_name>Transformers</original_name>
<name>Transformers</name>
<alternative_name>The Transformers</alternative_name>
<type>movie</type>
<id>1858</id>
<imdb_id>tt0418279</imdb_id>
<url>http://www.themoviedb.org/movie/1858<;/url>
<votes>28</votes>
<rating>7.2</rating>
<certification>PG-13</certification>
<overview>The Earth is caught in the middle of an intergalactic war /overview>
<released>2007-07-04</released>
<images>
<image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-original.jpg" size="original" id="4bc91347017a3c57fe007304"/>
<image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-mid.jpg" size="mid" id="4bc91347017a3c57fe007304"/>
<image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-cover.jpg" size="cover" id="4bc91347017a3c57fe007304"/>
<image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-thumb.jpg" size="thumb" id="4bc91347017a3c57fe007304"/>
<image type="backdrop" url="http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-original.jpg" size="original" id="4bc9133s9017a3c57fe0072ce"/>
<image type="backdrop" url="http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-poster.jpg" size="poster" id="4bc91339017a3c57fe0072ce"/>
<image type="backdrop" url="http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-thumb.jpg" size="thumb" id="4bc91339017a3c57fe0072ce"/>
</images>
<last_modified_at>2010-04-26 03:26:14</last_modified_at>
</movie>
</movies>
Run Code Online (Sandbox Code Playgroud)
我通过使用阅读所有属性
textReader.ReadToFollowing("original_name");
string title =textReader.ReadElementContentAsString("original_name",textReader.NamespaceURI);
Run Code Online (Sandbox Code Playgroud)
但是,无论我尝试什么,我都无法读取"图像"的子节点.
我目前有一个应用程序在服务器上调用Web服务进行搜索.我们可以期待返回大量数据,因此搜索花费的时间超过一分钟是常规的.
对于如此大量的搜索,我们一直在收到以下错误消息:
在00:00:59.7350618之后等待回复时,请求通道超时.增加传递给Request的调用的超时值或增加Binding上的SendTimeout值.分配给此操作的时间可能是较长超时的一部分.
这是我们在StackOverflow上发布的多个问题中看到的问题,遗憾的是,没有一个可用的解决方案帮助我解决问题,甚至无法配置超时窗口.
我们都改变了客户端的app.config,增加了所有超时(CloseTimeout,OpenTimeout,ReceiveTimeout和SendTimeout)以及服务器上服务的所有web.config值(closeTimeout,openTimeout和SendTimeout).
这些变化都没有任何影响,我仍然收到分钟超时.知道为什么改变这些值会产生影响吗?
在下面的示例中,我们缩短了时间,使我们不必在测试期间等待整整一分钟.
Web.config文件:
<configuration>
<system.web>
<compilation targetFramework="4.0" />
</system.web>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Net">
<listeners>
<add name="TraceFile" />
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="TraceFile" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener"
initializeData="trace.log" />
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose" />
<add name="System.Net.Sockets" value="Verbose" />
</switches>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging logMalformedMessages="false" logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="false" />
</diagnostics>
<services>
<service behaviorConfiguration="SearchIndexServiceBehavior" name="SearchIndex.Service">
<endpoint address="" binding="basicHttpBinding" contract="ISearchIndexServices" />
<host>
<timeouts closeTimeout="00:00:10" />
</host>
</service>
</services>
<bindings>
<basicHttpBinding> …Run Code Online (Sandbox Code Playgroud) 我在Windows 2008服务器上运行.我有一个调用wcf服务的Web服务.在WCF服务中,它试图投放20/08/2010的日期,因为它认为它是美国格式而不是澳大利亚.
到目前为止,我有:
我已将以下内容添加到Web服务和WCF应用程序web.config文件中
<globalization requestEncoding="utf-8"
responseEncoding="utf-8"
culture="en-AU"
uiCulture="en-AU" />
Run Code Online (Sandbox Code Playgroud)
这最终改变了Web服务的文化,但WCF服务仍然是美国文化.
谁能告诉我还有什么我可以试试的?
任何人都可以分享WCF服务和ASP.NET Web Api之间的实际区别吗?在哪种情况下,我们必须使用WCF服务和ASP.NET Web Api.
对于具有webHttpBinding和helpEnabled ="true"的服务,将正确生成帮助信息.想知道是否有可能以某种方式控制输出.以下是我想做的更改.
我有一个自托管的WCF服务作为Windows服务运行使用WebAPI来处理REST的东西,它工作得很好.
我意识到我应该真的使用IIS或类似的方式来播出实际的网页,但有没有办法获得服务调用以返回"只是"HTML?
即使我指定"BodyStye Bare",我仍然会获得围绕实际HTML的XML包装器,即
<?xml version="1.0" encoding="UTF-8"?>
<string> html page contents .... </string>
[WebGet(UriTemplate = "/start", BodyStyle = WebMessageBodyStyle.Bare)]
public string StartPage()
{
return System.IO.File.ReadAllText(@"c:\whatever\somefile.htm");
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,还是应该放弃?
是否可以设置标题WebChannelFactory?如果我使用的是WebClient对象,我可以这样做:
WebClient client = new WebClient();
client.Headers.Add("referer", "http://stackoverflow.com");
client.Headers.Add("user-agent", "Mozilla/5.0");
Run Code Online (Sandbox Code Playgroud)
但是我还没有找到修改标题的方法WebChannelFactory.
我正在尝试将一些JSON数据发送到我在c#和wcf中创建的服务.在Fiddler中,我的POST请求如下
小提琴手:
Request Header
User-Agent: Fiddler
Host: localhost
Content-Length: 29
Content-Type: application/json; charset=utf-8
Request Body
{sn:"2705", modelCode:1702 }
Run Code Online (Sandbox Code Playgroud)
以下是服务界面.它使用WebInvoke属性来管理POST请求
[ServiceContract]
public interface IProjectorService
{
[WebInvoke(Method="POST", UriTemplate="projectors", RequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json )]
[OperationContract]
void RecordBreakdown(Record record);
}
Run Code Online (Sandbox Code Playgroud)
服务接口的实现将传入的参数传递给参数,并使用ado将此数据发送到SQL数据库.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public partial class ProjectorService : IProjectorService
{
public void RecordBreakdown(Record record)
{
//ado code to send data to db (ie do record.SerialNumber...
}
}
Run Code Online (Sandbox Code Playgroud)
POCO对象表示多个参数
[DataContract]
public class Record
{
[DataMember]
public string SerialNumber { get; set; }
[DataMember]
public int …Run Code Online (Sandbox Code Playgroud) 我读了一些关于这个的文章,我发现要获得wcf从我们添加的帖子请求中获取数据
[ServiceContract]
public interface IService1 {
[OperationContract]
[WebInvoke(
Method = "POST",
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/GetData")]
void GetData(Stream data);
}
Run Code Online (Sandbox Code Playgroud)
并在实施中
public string GetData( Stream input)
{
long incomingLength = WebOperationContext.Current.IncomingRequest.ContentLength;
string[] result = new string[incomingLength];
int cnter = 0;
int arrayVal = -1;
do
{
if (arrayVal != -1) result[cnter++] = Convert.ToChar(arrayVal).ToString();
arrayVal = input.ReadByte();
} while (arrayVal != -1);
return incomingLength.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我应该怎样做,在表单请求中提交操作会发送到我的服务并消费?
在Stream参数中,我是否可以通过Request ["FirstName"]从表单中获取信息?