I am trying to redirect a user after authentication from a login service to the resource service. There for, when someone tries to access the main page of my app, I check for the auth token inside a cookie and based on that validation, I serve the html file or redirect to the auth service where I am greeting them with a login/register form.
if(cookie?.auth){
return res.status( 301 ).redirect( `${ protocol }://${ process.env.REDIRECT_AUTH }/login?redirect=${ protocol }://${ hostname }:${ PORT }&session=${ req.sessionID }` );
}
This part works as expected. I get redirected to the endpoint. The question mark appears here. After I enter the credentials, I make a post request to the auth service and if everything goes right, I call the res.redirect(location), the location being the redirect query listed in the link above with some parameters as well.
Here is the snippit:
return res.status( 301 ).redirect( `${ location }?auth=${ token }` as string );
Of course, I am checking if the request query contain the credentials I need. The request actually returns 200, but instead of being redirected to the page, I get the file as a response payload.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
HAASDASD
</body>
</html>
My immediate conclusion was that is about the difference between the GET vs POST method and therefor I get a different result. Is there anyone who stumbled into something similar?
i get the following errors when i try to run a google search api for processing. so it is a api made for the codeing enviroment processing. This is the error:
earchBy: Processing
com.google.soap.search.GoogleSearchFault: [SOAPException: faultCode=SOAP-ENV:Protocol; msg=Unsupported response content type "text/html; charset=UTF-8", must be: "text/xml". Response was:
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1,width=device-width">
<title>Error 404 (Not Found)!!1</title>
make event
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}#media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}#media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}#media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
</style>
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>404.</b> <ins>That’s an error.</ins>
<p>The requested URL <code>/search/beta2</code> was not found on this server. <ins>That’s all we know.</ins>
]
at com.google.soap.search.GoogleSearch.doSearch(GoogleSearch.java:197)
at saito.google.Google.doQuery(Google.java:93)
at saito.google.Google.run(Google.java:76)
at java.lang.Thread.run(Thread.java:745)
Disabling googleEvent() because of an error.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at saito.google.Google.makeEvent(Google.java:163)
at saito.google.Google.run(Google.java:78)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at google_api_test.googleEvent(google_api_test.java:82)
... 7 more
and this is the my code:
import saito.google.*;
String WORD = "Processing";
Google google;
void setup(){
size(200, 200);
google = new Google(this, "here is my api key");
google.searchBy(WORD);
smooth();
}
void draw(){
background(255);
if( google.isSearching() ){
}
}
void mousePressed(){
google.gotoNext();
}
void googleEvent(GoogleResult result){
println("total: " + result.totalResultsCount());
for(int i = 0; i < result.size(); i++){
println(result.title(i) + " : "+ result.url(i) + "-" + enter code hereresult.summary(i));
}
}
any help is greatly appreciated!!
It looks like you're using a very old library, whose last release was almost 11 years ago.
That library uses the Google SOAP API, which was deprecated in 2006 and disabled in 2009.
In other words, that library won't work anymore.
Google has a new search API that you should be using instead. Here is a link to a Java wrapper of that API.
See also: Problem with Google SOAP API URL
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
Based on the info from this MS link, I've got the following code in a Windows CE / Compact Framework app which calls a REST method in a Web API server app:
public static string SendXMLFile2(string uri, string data)
{
//TODO: Remove below after testing
String s = data.Substring(0, 128);
MessageBox.Show(String.Format("data length is {0}, uri is {1}, first part is {2}", data.Length, uri, s));
//TODO: Remove above after testing
HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(uri);
myHttpWebRequest.AllowWriteStreamBuffering=false;
myHttpWebRequest.Method="POST";
UTF8Encoding encodedData = new UTF8Encoding();
//ASCIIEncoding encodedData=new ASCIIEncoding();
byte[] byteArray=encodedData.GetBytes(data);
//myHttpWebRequest.ContentType="application/x-www-form-urlencoded";
myHttpWebRequest.ContentType = "application/xml";
myHttpWebRequest.ContentLength=byteArray.Length;
Stream newStream=myHttpWebRequest.GetRequestStream();
newStream.Write(byteArray,0,byteArray.Length);
newStream.Close();
HttpWebResponse myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();
return myHttpWebResponse.StatusDescription;
}
What I see is:
...and then I get, "The remote server returned an error: (400) Bad Request." The breakpoint in my REST method (on the server) is not even reached when this exception is thrown/returned.
Why? What do I have to change in the code to get the "bad" request to be considered "good"?
UPDATE
To answer mrchief, here's the server code:
[Route("api/inventory/sendXML/{userId}/{pwd}/{filename}")]
public async void SendInventoryXML(String userId, String pwd, String fileName)
{
XDocument doc = XDocument.Load(await Request.Content.ReadAsStreamAsync());
String saveLoc = String.Format(#"C:\HDP\{0}.xml", fileName);
doc.Save(saveLoc);
}
Yes, I'm ignoring userId and pwd for now.
UPDATE 2
Plugging this:
http://192.168.125.50:21608/api/inventory/sendXML/duckbilled/platypus/INV_bla.xml
...into Postman, I get:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
</HEAD>
<BODY>
<h2>Bad Request - Invalid Hostname</h2>
<hr>
<p>HTTP Error 400. The request hostname is invalid.</p>
</BODY>
</HTML>
??? This same uri works fine when I call it from a Winforms app created in Visual Studio 2013. Well, actually, I use localhost instead there. I get the same response as above if I use the host name instead of the IP Address. But if I use localhost from PostMan:
http://localhost:21608/api/inventory/sendXML/duckbilled/platypus/INV_bla.xml
I get:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>IIS 8.0 Detailed Error - 404.0 - Not Found</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana,Arial,Helvetica,sans-serif;}
code{margin:0;color:#006600;font-size:1.1em;font-weight:bold;}
.config_source code{font-size:.8em;color:#000000;}
pre{margin:0;font-size:1.4em;word-wrap:break-word;}
ul,ol{margin:10px 0 10px 5px;}
ul.first,ol.first{margin-top:5px;}
fieldset{padding:0 15px 10px 15px;word-break:break-all;}
.summary-container fieldset{padding-bottom:5px;margin-top:4px;}
legend.no-expand-all{padding:2px 15px 4px 10px;margin:0 0 0 -12px;}
legend{color:#333333;;margin:4px 0 8px -12px;_margin-top:0px;
font-weight:bold;font-size:1em;}
a:link,a:visited{color:#007EFF;font-weight:bold;}
a:hover{text-decoration:none;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.4em;margin:10px 0 0 0;color:#CC0000;}
h4{font-size:1.2em;margin:10px 0 5px 0;
}#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS",Verdana,sans-serif;
color:#FFF;background-color:#5C87B2;
}#content{margin:0 0 0 2%;position:relative;}
.summary-container,.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
.content-container p{margin:0 0 10px 0;
}#details-left{width:35%;float:left;margin-right:2%;
}#details-right{width:63%;float:left;overflow:hidden;
}#server_version{width:96%;_height:1px;min-height:1px;margin:0 0 5px 0;padding:11px 2% 8px 2%;color:#FFFFFF;
background-color:#5A7FA5;border-bottom:1px solid #C1CFDD;border-top:1px solid #4A6C8E;font-weight:normal;
font-size:1em;color:#FFF;text-align:right;
}#server_version p{margin:5px 0;}
table{margin:4px 0 4px 0;width:100%;border:none;}
td,th{vertical-align:top;padding:3px 0;text-align:left;font-weight:normal;border:none;}
th{width:30%;text-align:right;padding-right:2%;font-weight:bold;}
thead th{background-color:#ebebeb;width:25%;
}#details-right th{width:20%;}
table tr.alt td,table tr.alt th{}
.highlight-code{color:#CC0000;font-weight:bold;font-style:italic;}
.clear{clear:both;}
.preferred{padding:0 5px 2px 5px;font-weight:normal;background:#006633;color:#FFF;font-size:.8em;}
-->
</style>
</head>
<body>
<div id="content">
<div class="content-container">
<h3>HTTP Error 404.0 - Not Found</h3>
<h4>The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.</h4>
...??? Is it just because this is a POST that is supposed to have an XML file attached, and because it's not there, it gets consumed with confusion?
UPDATE 3
I see the "." in "INV_bla.xml" was confusing PostMan. If I remove it, so that the URI is "http://localhost:21609/api/inventory/sendXML/duckbilled/platypus/INV_bla", I get instead a 500 err msg and:
<!DOCTYPE html>
<html>
<head>
<title>Root element is missing.</title>
<meta name="viewport" content="width=device-width" />
<style>
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
#media screen and (max-width: 639px) {
pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; }
}
#media screen and (max-width: 479px) {
pre { width: 280px; }
}
</style>
</head>
<body bgcolor="white">
<span>
<H1>Server Error in '/' Application.
<hr width=100% size=1 color=silver>
</H1>
<h2>
<i>Root element is missing.</i>
</h2>
</span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
<br>
<br>
<b> Exception Details: </b>System.Xml.XmlException: Root element is missing.
<br>
<br>
<b>Source Error:</b>
<br>
<br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code>
<pre>
Line 29: public async void SendInventoryXML(String userId, String pwd, String fileName)
Line 30: {
<font color=red>Line 31: XDocument doc = XDocument.Load(await Request.Content.ReadAsStreamAsync());
</font>Line 32: String saveLoc = String.Format(#"C:\HDP\{0}.xml", fileName);
Line 33: doc.Save(saveLoc);
</pre>
</code>
</td>
</tr>
</table>
<br>
<b> Source File: </b> c:\Project\git\CStore\HHS.Web\Controllers\InventoryXMLController.cs
<b> Line: </b> 31
<br>
<br>
<b>Stack Trace:</b>
<br>
<br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code>
<pre>
[XmlException: Root element is missing.]
System.Xml.XmlTextReaderImpl.Throw(Exception e) +69
System.Xml.XmlTextReaderImpl.ParseDocumentContent() +305
System.Xml.XmlTextReaderImpl.Read() +213
System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options) +44
System.Xml.Linq.XDocument.Load(Stream stream, LoadOptions options) +57
System.Xml.Linq.XDocument.Load(Stream stream) +6
HHS.Web.Controllers.<SendInventoryXML>d__0.MoveNext() in c:\Project\git\CStore\HHS.Web\Controllers\InventoryXMLController.cs:31
System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(Object state) +50
System.Web.<>c__DisplayClass7.<Post>b__6() +15
System.Web.Util.SynchronizationHelper.SafeWrapCallback(Action action) +91
</pre>
</code>
</td>
</tr>
</table>
<br>
<hr width=100% size=1 color=silver>
<b>Version Information:</b> Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18446
</font>
</body>
</html>
<!--
[XmlException]: Root element is missing.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
at System.Xml.Linq.XDocument.Load(Stream stream, LoadOptions options)
at System.Xml.Linq.XDocument.Load(Stream stream)
at HHS.Web.Controllers.InventoryXMLController.<SendInventoryXML>d__0.MoveNext() in c:\Project\git\CStore\HHS.Web\Controllers\InventoryXMLController.cs:line 31
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(Object state)
at System.Web.AspNetSynchronizationContext.<>c__DisplayClass7.<Post>b__6()
at System.Web.Util.SynchronizationHelper.SafeWrapCallback(Action action)
-->
UPDATE 4
With this code (following Brinn's suggestion):
String datta = "<Content></Content>";
String s = SendXMLFile2(uri, datta);
MessageBox.Show(s); // TODO: Remove or comment out after testing
...I still get a 400 error.
UPDATE 5
There is ONE permutation that actually works in Postman to the extent that I reach the breakpoint in the server code (http://localhost:21608/api/inventory/sendXML/duckbill/platypus/INV_bla). However, when I hit F10 to step from the "XDocument doc = ..." line to the "String saveLoc = ..." line, the "Root element is missing" exception is thrown (the one shown above in all its gory glory).
I cannot use that exact same URI in my app, though, as "localhost" is URI-non-grata there.
UPDATE 6
Grasping at straws, I even tried this:
String xmlHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
String crlf = "\r\n";
String datta = "<Content></Content>";
data = xmlHeader + crlf + datta + crlf;
String s = SendXMLFile2(uri, data);
...but the "400 Bad Request" err remains, causing me to rue the day I decided to hang up my spurs.
UPDATE 7
Even when I add an XML file in Postman, I get an error (500 - Internal Server Error):
UPDATE 8
Even with the code straight from the Wigley's mouth (from p. 358 of "Microsoft .NET Compact Framework"):
public static string SendXMLFile2(string uri, string data)
{
WebRequest req = WebRequest.Create(uri);
req.Method = "Post";
req.ContentType = "text/plain; charset=utf-8";
// Encode the data
byte[] encodedBytes = Encoding.UTF8.GetBytes(data);
req.ContentLength = encodedBytes.Length;
// Write encoded data into request stream
Stream requestStream = req.GetRequestStream();
requestStream.Write(encodedBytes, 0, encodedBytes.Length);
requestStream.Close();
WebResponse result = req.GetResponse();
return result.ToString();
}
...I get the "400 - Bad Request" err.
Is it possibly the data - the contents of the XML file - that is throwing a spanner/monkey wrench into the works?
Here's what that looks like (excerpt, with the great middle section elided):
<?xml version="1.0" encoding="utf-8"?>
<Command>
<INV>
<line_id>1</line_id>
<ref_no>valerie</ref_no>
<upc_code>79997000331</upc_code>
<description>ffff</description>
<department>2</department>
<vendor_id>1</vendor_id>
<upc_pack_size>1</upc_pack_size>
<id>79997000331</id>
<pack_size>1</pack_size>
<unit_cost>0</unit_cost>
<unit_list>0</unit_list>
<unit_qty>9</unit_qty>
<new_item>-1</new_item>
</INV>
<INV>
<line_id>2</line_id>
<ref_no>valerie</ref_no>
<upc_code>81127600412</upc_code>
<description>SLV EAG FF 100 BX</description>
<department>2.01</department>
<vendor_id>1</vendor_id>
<upc_pack_size>1</upc_pack_size>
<id>81127600412</id>
<pack_size>1</pack_size>
<unit_cost>0</unit_cost>
<unit_list>0</unit_list>
<unit_qty>9</unit_qty>
<new_item>0</new_item>
</INV>
. . .
<INV>
<line_id>3277</line_id>
<ref_no>valerie</ref_no>
<upc_code>00980000007</upc_code>
<description>TICTAC</description>
<department>8.8</department>
<vendor_id />
<upc_pack_size>1</upc_pack_size>
<id>00980000007</id>
<pack_size>1</pack_size>
<unit_cost>2</unit_cost>
<unit_list>3.55</unit_list>
<unit_qty>0</unit_qty>
<new_item>0</new_item>
</INV>
</Command>
UPDATE 9
I get "The remote server returned an error: (400) Bad Request" in my app. Now I do see two interesting entries in Fiddler: There are two 404s that display in Fiddler which
have "Host" vals of "localhost:21609" and "localhost:21608" (which relate to the REST calls in question), and "URL" values of /favicon.ico ... ???
What in red blazes is that about? They have a "Body" value of 4,905, a "Caching" value of "private" and "Content-Type" of text/html; charset=utf8
Why is favicon.ico problematic or even considered here?
UPDATE 10
This is Fiddler's "Log" tab contents for my "faked" call to the REST method (using Composer to add my POST URI and upload an XML file):
09:14:20:9657 [WebSocket #1439] Read from Server failed... Object reference not set to an instance of an object.
09:23:19:7275 /Fiddler.CertMaker> Invoking makecert.exe with arguments: -pe -ss my -n "CN=www.google-analytics.com, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com" -sky exchange -in DO_NOT_TRUST_FiddlerRoot -is my -eku 1.3.6.1.5.5.7.3.1 -cy end -a sha1 -m 132 -b 09/03/2013
09:23:20:1296 /Fiddler.CertMaker>64-CreateCert(www.google-analytics.com) => (0).
09:25:45:6411 [Fiddler] No HTTP request was received from (chrome:1384) new client socket, port 4235.
09:25:55:6411 [Fiddler] No HTTP request was received from (chrome:1384) new client socket, port 4241.
09:36:35:6681 [WebSocket #1473] Read from Client returned error: 0
09:36:35:7491 [WebSocket #1473] Read from Server returned error: 0
09:37:45:4031 [WebSocket #1552] Read from Client returned error: 0
09:37:45:4861 [WebSocket #1552] Read from Server returned error: 0
09:37:51:8077 [WebSocket #1575] Read from Client returned error: 0
09:37:51:8877 [WebSocket #1575] Read from Server returned error: 0
I would think maybe the "Object reference not set to an instance of an object" is indicating something in my server code might be the problem - but the key part of that is not even reached...is the fact that I'm calling async/await code in the server a possible cause of my woes???
UPDATE 11
With the only change being that "21609" becomes "21608" in my URL, Fiddler now gives me a "500" ("Internal Server Error") Result (when using 21609 I got "204" Result, but it didn't work).
With this port number, the real "meat and potatoes" code is reached on the server (the async/await code that calls XDocument.Load(), etc.
Fiddler's Inspectors.WebView tab shows me:
Is the problem that this xml does not start off with this line:
<?xml version="1.0" encoding="utf-8"?>
...and is thus not seen as valid/real XML?
UPDATE 12
Nope - even with a file that contains that xml starting line, it fails in the same way...
UPDATE 13
So depending on the client used, I get different results:
From the handheld device, I get a "/favicon.ico" err in Fiddler.
From Fiddler itself (using the "Composer" tab) I get, "Data at the root level is invalid. Line 1, position 1"
From a test Winforms app, the code works (the expected file is populated and saved where it should be) but there is no trace in Fiddler that an HTTP call was even made (there is no entry/evidence for it)...???
UPDATE 14
The server app does have this in Global.asax.cs:
RouteTable.Routes.IgnoreRoute("{*favicon}", new { favicon = #"(.*/)?favicon.ico(/.*)?" });
...so...what's the problem?
UPDATE 15
I notice that I can get trace log files generated by my server app from this location: C:\Users\\Documents\IISExpress\TraceLogFiles\
Looking there, I find the proverbial boatload of information (overload?), such as:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://localhost:21609/"
siteId="40"
appPoolId="Clr4IntegratedAppPool"
processId="10580"
verb="GET"
remoteUserName=""
userName=""
tokenUserName="SSCS\clay"
authenticationType="anonymous"
activityId="{00000000-0000-0000-1D00-0080020000ED}"
failureReason="STATUS_CODE"
statusCode="200"
triggerStatusCode="403.14"
timeTaken="62"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
. . .
What strikes me is the verb "GET" - this is a "POST" not a "GET" - or am I misunderstanding the meaning of the "verb" member?
UPDATE 16
I tested three different ways of calling the REST method, examining what was happening as best as I could using Fiddler and the trace log files that the server creates.
The only successful calling and execution of the server code (receiving the file, and then saving it to disk) occurred with the Winforms (Visual Studio 2013, .NET 4) app.
Here are some details gleaned from those three attempts:
[a] EXE on handheld device:
400 - Bad Request
breakpoint in server Controller code NOT reached
No activity seen in Fiddler
Summary: Fails - server is reached, but returns err msg
Pertinent contents of Log Trace file:
[ no log trace file created ]
[b] Test Winforms app:
breakpoint in server Controller code IS reached
No activity seen in Fiddler (?!?)
Method works - file is created by server code with the data it should have
Summary: works, but is "invisible" to Fiddler
Pertinent contents of Log Trace file:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://localhost:21608/api/inventory/sendXML/duckbill/Platypus/DSD_42314_3_20140310140842828" siteId="41" appPoolId="Clr4IntegratedAppPool" processId="8916"
verb="POST"
remoteUserName=""
userName=""
tokenUserName="NRBQ\clay"
authenticationType="anonymous"
activityId="{00000000-0000-0000-5D00-0080000000F6}"
failureReason="STATUS_CODE"
statusCode="204"
triggerStatusCode="204"
timeTaken="3666"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
[c] Fiddler "Composer"
breakpoint in server Controller code IS reached
Activity IS seen in Fiddler
Result = 500 ("Internal Server Error")
Summary: Gets further than the handheld, but fails
Pertinent contents of Log Trace file:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://localhost:21608/api/inventory/sendXML/duckbill/platypus/INV_bla"
siteId="41"
appPoolId="Clr4IntegratedAppPool"
processId="8916"
verb="POST"
remoteUserName=""
userName=""
tokenUserName="NRBQ\clay"
authenticationType="anonymous"
activityId="{00000000-0000-0000-4800-0080060000F6}"
failureReason="STATUS_CODE"
statusCode="500"
triggerStatusCode="204"
timeTaken="2964"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
UPDATE 17
Could it be that my encoding is wrong? It seems that might be the case, based on what I read here when researching the err msg I get ("Data at the root level is invalid. Line 1, position 1.")
This is what I'm doing in the client:
WebRequest req = WebRequest.Create(uri);
req.Method = "Post";
req.ContentType = "text/plain; charset=utf-8";
byte[] encodedBytes = Encoding.UTF8.GetBytes(data);
Should ContentType be "application/xml" or "application/x-www-form-urlencoded" (or something else) instead?
and/or should Encoding be something other than UTF8?
UPDATE 18
I noticed in C:\Users\clay\Documents\IISExpress\TraceLogFiles\ that I was getting a "403.14":
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://localhost:21609/"
siteId="40"
appPoolId="Clr4IntegratedAppPool"
processId="1572"
verb="GET"
remoteUserName=""
userName=""
tokenUserName="SSCS\clay"
authenticationType="anonymous"
activityId="{00000000-0000-0000-0200-0080060000EB}"
failureReason="STATUS_CODE"
statusCode="200"
triggerStatusCode="403.14"
timeTaken="904"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
Which, according to this and more specifically this indicates "Directory listing denied."
Thinking this may be the crux of the problem, I researched what to do about a 403.14, and I followed Method 1 here, which is entitled "Add a default document (Recommended)" but actually contains the steps to "Enable the Directory Browsing feature in IIS"
But I still get the same triggerStatusCode ("403.14") in C:\Users\clay\Documents\IISExpress\TraceLogFiles\
So I was going to try the other method, too, but I already had a default document, so enable was not an option there (disable was).
Finally, I went with the final option, of updating the IIS Express config:
While that made the web pages look better when running the server (the 403.14 was replaced with a "localhost - /" dir listing), it made no difference when the client app attempted to send the XML file to the server. So, this last changed "fixed" the pages that display in the browser when the server is started, but I'm still seeing the "403.14" problem in the Trace log files when I try to access the server from my client app...???
UPDATE 19
With the latest change (setting the IIS config), the Trace log no longer has the "403.14":
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<failedRequest url="http://localhost:21609/"
. . .
verb="GET"
. . .
failureReason="STATUS_CODE"
statusCode="200"
triggerStatusCode="200"
timeTaken="78"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
...so I guess the "400 - Bad Request" error I get from the server when calling it from the client is unrelated to this erstwhile 403.14 error. Note, too, that it the "failedRequest" is some "GET" operation (whereas my failing call from the client is an HttpPost). What is failing here I don't know, as statusCode 200 is, in fact, "OK"
The first time (only) that I start the server (or start and then call the server from the client), I get a 404 for a missing favicon, but that doesn't seem to really be a problem.
UPDATE 20
The solution was to add at a command prompt either this:
netsh http add urlacl url=http://shannon2:80/ user=everyone
...or the same for port 8080 instead of 80.
See Update 5 here.
It could, frankly, be a number of things. If the service is hosted on IIS, and you have IE, then, being a REST service, navigate to that URI, and you should get a 400.xx error. The xx part is clarified here
I'm using varnish to cache our pages. When we get a 503 -- which happens a little too often -- I'd like to put some sort of page tracking on there. I'd like to place the GA code in there. I can't seem to find any instance of anyone else doing this. Has anyone done this? Is there some sort of T&C violation in doing this?
For Varnish you can use vcl_error to include your own responses (that have the Google Analytics code).
Edit: I have not tested any of these. They are just examples.
An example:
sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8";
if (obj.status == 503) {
synthetic {"
<html>
<head>
<title></title>
</head>
<body>
<h1>Error</h1>
<p>Something</p>
<!-- ANALYTICS CODE -->
</body>
</html>
"};
return(deliver);
}
}
Alternatively you can add your own pages from the file system by using vmod (which is included as standard with version 3.*+).
# Add this to the top of your config
import std;
# vcl_error
sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8";
if (obj.status == 503) {
set obj.http.error503 = std.fileread("/path/to/errors/503.html");
synthetic obj.http.error503;
return(deliver);
}
}
I am trying to learn the ClientLogin Interface detailed on the Account Authentication APIs on Google code website.
I am using Firefox 3.5pre (Shiretoko) and XMLHttpRequest object in Javascript to follow the process. Here's a stripped down version of what I have:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
//<![CDATA[
function update() {
var auth_params = "accountType=HOSTED_OR_GOOGLE&Email=val"
+"&passwd=val&service=cl&source=MMA-Learning";
var request = new XMLHttpRequest();
request.open('POST', 'https://www.google.com/accounts/ClientLogin', true);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.setRequestHeader("Content-Length", auth_params.length);
request.setRequestHeader("Connection", "close");
request.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
alert ("Request done");
}
};
try {
request.send( auth_params );
} catch (e) {
alert ("Send Exception:\n"+e);
}
}
//]]>
</script>
</head>
<body>
Authenticate
</body>
</html>
When I click on the Authenticate link, all I get back is a Bad Request response. Examining the request headers, I don't see Content-Type set to application/x-www-form-urlencoded.
I am using Firebug 1.5X to examine the traffic.
For now, all I want to do is generate request mentioned in the Sample Request section and get a response mentioned in the Sample Responses section. If I get there, I want to get some account specific data like, unread Google Reader feeds etc.
I suspect that you've been bitten by Javascript's "same origin" policy. It prevents Javascript, including XmlHttpRequest, from accessing one domain from another. More information is available from Mozilla.
There are hacks to get around this, but I have no idea if they'll work with Google's API.
the 'p' in 'passwd' is a small 'p' instead of a capital 'P'
you probably figured that out tho. When you post and you find the answer, it is always polite if you post the answer as well. This helps the people in the future who will look at your post for information
That 'p' took me two hours to find because i persummed that the code google gave was copied correctely and there was no case mistakes
no point in Internet being full of questions with no answers