I have a WCF web service which is hosted at a .svc file by ASP.NET. .svc file contains following configuration:
<%# ServiceHost Language="C#" Debug="true" Service="assembly.IPriceListProvider, assembly" Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" %>
web.config contains configuration of the WCF. Here goes the binding configuration:
<binding name="basicHttpBinding_PriceListProvider" maxBufferSize="10485760"
maxReceivedMessageSize="10485760">
<readerQuotas maxArrayLength="16384000" />
</binding>
To test the service, I click on .svc file and click F5. WCF Test Client is opened. But the configuration has changed. The values which I've explicitly defined have now default values:
<binding name="basicHttpBindingEndPoint_PriceListProvider" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
**maxBufferSize="65536"** maxBufferPoolSize="524288" **maxReceivedMessageSize="65536"**
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" **maxArrayLength="16384"**
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
Why does the configuration change? How do I persist original values?
I've heard something about simplified .svc configuration: a default binding for .svc is configured even if you don't specify it explicitly in web.config. Can it be the case?
The values for maxBufferSize and maxReceivedMessageSize are not propagated to the WSDL file that is published by your service. That´s why the wcf test client is unable to retrieve them and takes default values.
You can still change the values with the SvcConfigEditor every time you start the wcf test client. Therefor perform a right click on the config file in the wcf test client and look for bindings. But the changes will be lost, the next time you start the client.
You can also test your service with a self written client and set the values there like shown in the following example.
BasicHttpBinding binding= new BasicHttpBinding();
binding.MaxRecievedMessageSize = yourValue;
EndpointAddress endpointAddress = new EndpointAddress("the address");
ClientForContract client= new ClientForContract (binding,endpointAddress);
client.TheMethod();
client.Close();
Hope this helps!
Related
I am trying to implement attachment functionality in one of my web application. It has three layer. Presentation, Business and Service Layer and i have blob datatype in database of attachment field....i am getting below Error while transferring data from business layer to service layer.
The remote server returned an unexpected response: (400) Bad Request
I cant find any solution even i tried with increase arraylength, buffersize etc...But still getting error...So if anyone have any idea than please help me....I am facing this issue since 5 days.....
Here is my web.config settings
<binding name="BasicHttpBinding_ITestService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="83886080" maxBufferPoolSize="83886080" maxReceivedMessageSize="83886080"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
turn on WCF tracing on server side by adding following section to WCF host's configuration file. you will be able to get more specific reason for your failure from the trace file.
<system.diagnostics>
<trace autoflush="false"/>
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="sdt" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\temp\ServiceTrace.svclog"/>
</listeners>
</source>
</sources>
</system.diagnostics>
You need to use WCF streaming for the purpose of uploading large files. But still there are some limits for the approach being used. So transferring large files over HTTP needs a lot of considerations.
Detailed examples and consideration has been posted already at following links.
http://garfoot.com/blog/2008/06/transferring-large-files-using-wcf/
http://kjellsj.blogspot.com/2007/02/wcf-streaming-upload-files-over-http.html
need to use WCF streaming for the purpose of uploading large files. But still there are some limits for the approach being used. So transferring large files over HTTP needs a lot of considerations. Detailed examples and consideration has been posted already at following links. http://garfoot.com/blog/2008/06/transferring-large-files-using-wcf/
http://kjellsj.blogspot.com/2007/02/wcf-streaming-upload-files-over-http.html
Well, i can't solve the following problem.
I have the next:
* A Web Service development in C# + .Net Framework 3.5 + iBatis (VS2010) with some WebMethods.
* The Web Service run on a local server, in IIS 5.1 (http://localhost/BookService/BookService.asmx).
* An application WF+C# + .Net Framework 3.5 (VS2010) where the BO layer have a service reference to the Web Service.
The app.config generated by Service Reference is:
<?xml version="1.0" encoding="utf-8" ?>´
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BookServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192"
maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://10.0.2.15/BookService/BooksService.asmx"
binding="basicHttpBinding" bindingConfiguration="BookServiceSoap"
contract="BookService.BookServiceSoap" name="BookServiceSoap" />
</client>
</system.serviceModel>
</configuration>
I'm trying to connecting me to the web service making for example
BookService.BookServiceSoapClient query = new BookService.BookServiceSoapClient("BookServiceSoap","http://10.0.2.15/BookService/BookService.asmx");
or with out the endpointname and the url
BookService.BookServiceSoapClient query = new BookService.BookServiceSoapClient();
But in execution time appears the following message
Could not find endpoint element with name 'BookServiceSoap'
and contract 'BookService.BookServiceSoap' in the ServiceModel
client configuration section. This might be because no
configuration file was found for your application, or because
no endpoint element matching this name could be found in the client element.
Can somebody show me un right example to call for example the method HelloWorld.
Regards!
I have a solution in which a Silverlight application calls a WCF service (self-hosted in console application) which we'll call A, which calls another WCF service (hosted in IIS) which we'll call B.
WCF service A contains two standard methods and one methods which uses impersonation and calls WCF service B. I have no problems when I try calling WCF service A from Silverlight, including the call with the impersonation, but when I try to do the same from a ASP.NET application I get the following exception when I call WCF service B from the impersonation methods:
Could not load file or assembly 'System.IdentityModel.Selectors, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.
Exception from HRESULT: 0x80070542
Here is the relevant part of my web.config:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CustomBinding_IPrint">
<binaryMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
maxSessionSize="2048">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binaryMessageEncoding>
<httpTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Ntlm"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
<binding name="WebHttpBinding_IClientAccessPolicy">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Soap12" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://localhost:8733/ClientAppsWCF" binding="customBinding"
bindingConfiguration="CustomBinding_IPrint" contract="ClientApps.IPrint"
name="CustomBinding_IPrint">
<identity>
<userPrincipalName value="ytal#ifnsystems.com" />
</identity>
</endpoint>
<endpoint binding="customBinding" bindingConfiguration="WebHttpBinding_IClientAccessPolicy"
contract="ClientApps.IClientAccessPolicy" name="WebHttpBinding_IClientAccessPolicy" />
</client>
</system.serviceModel>
Will appreciate if someone can help me out with this.
I'm not sure about the exact problem, but I'll try to help you from similar erros regarding impersonation.
It could be some things:
Kerberos Authentication:
Since your service A is self hosted, it sends the host crendential to Service B (on IIS).
Try checking on Event viewer, on Application and Security tabs, if the users was logged ok. See if it using Kerberos or NTLM. If it goes back to Kerberos, check the SPN and if the user is trusted for delegation in Active Diretory.
Check if the assembly properly signed.
Check if the user (host A) has permission to acess the assembly you are trying to load.
I have an ASP.NET web application where i am using WCF 4 REST services to insert and get data from the database. But when trying to insert large amount of data like data for 1000 employees i am getting the error 'Unexpected End of File'.
Can anyone suggest a solution. Thanks in advance.
Have you tried setting the Max sizes in the web.config on the WCF services and possibly in the App/Web config file on the client side. It needs to look something like this:
<binding name="NewBinding0" sendTimeout="00:10:00" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
This should work for REST service.
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint helpEnabled="true" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
maxBufferPoolSize="2147483647" automaticFormatSelectionEnabled="true">
<security mode="None"/>
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>
I am deploying a web application to a remote server. I set up IIS 7 and the site comes up.
As part of the web application there is a service reference to a wcf service.
All of this works fine on my localhost everything runs.
I never did anything with the service itself on the deployment server. I just set up the web application in IIS. Now I am getting an socket exception error that could be from a few thing, I just want to eliminate my options......
My question is do I have to publish the service as part of my deployment process or since I published the web application with a service reference attached to it I should be ok?
Here is my web config portion of the service as you can see there is a reference to localhost (this cant be good) how is this resolved?
</system.webServer>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IHSSWcfServices" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:49506/IHSSWcfServices.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHSSWcfServices"
contract="ServiceReference1.IHSSWcfServices" name="BasicHttpBinding_IHSSWcfServices" />
</client>
</system.serviceModel>
You do not have to publish the service as part of the deployment process for the application(otherwise, an ASP.NET application could never talk to an externally published service).
Just make sure that the service address you are trying to communicate with is the actual address of the hosted service (and not localhost, for instance, which would work on your machine, but not once it is deployed).
If you are writing the service and the client, the service does have to be deployed somewhere, and that somewhere must be accessible to the deployed location of the client. The deployment of the service is, however, independent of the deployment of the client.
Your system.ServiceModel section in config is clearly referencing the localhost. Try to change it to point to the actual IIS URL